آموزش برنامه نویسی اندروید (Android)
۴۱۹ آموزش
نمایش دسته بندی ها (۴۱۹ آموزش)

ارسال یک مقدار تنها (رشته یا عدد یا ...) از یک Activity به Activity دیگر، در برنامه نویسی اندروید

زمانی که کاربر، از یک Activity به یک Activity دیگر وارد می شود، ممکن است که بخواهیم یک سری اطلاعات را از Activity قبلی، به Activity جدید وارد کنیم (مثلا مقادیر انتخاب شده توسط کاربر). در این مبحث، نحوه ارسال یک مقدار از یک Activity به Activity دیگر را شرح می دهیم (چنانچه قصد دارید که یک آرایه (Array) را ارسال کنید، آموزش شماره 3018 را بخوانید).

برای ارسال مقدار از Activity فعلی، روش putExtra به کار می رود. بهتر است ابتدا شکل کلی آن را بیان کنیم و بعد به صورت جداگانه، شیوه استفاده از آن برای انواع متغیرها (رشته، عدد و ...) را شرح بدهیم. شیوه کلی استفاده از روش putExtra ، به صورت زیر می باشد :


intent.putExtra(key, value);

که در آن، intent ، یک شیء (object) از نوع Intent می باشد (یک شیء که از کلاس Intent ساخته شده)(که از آن برای رفتن به Activity بعدی استفاده می کنیم). key باید به صورت یک رشته باشد که نامی منحصربفرد (انتخاب به دلخواه) برای دریافت مقدار در Activity بعدی می باشد (زیرا ممکن است چندین مقدار را ارسال کنیم و بنابراین باید هر کدام، یک نام منحصربفرد (key) داشته باشند تا بتوانیم آنها را به صورت جداگانه دریافت کنیم). value نیز همان مقداری است که می خواهیم به Activity بعدی ارسال شود.

ارسال یک مقدار از نوع رشته (String) :

درون Activity اول، کدهای زیر را می نویسیم :


Intent intent = new Intent(getApplicationContext(), NewActivity.class);
String myVariable_1 = "value";
intent.putExtra("key_name", myVariable_1);
startActivity(intent);

دقت کنید که NewActivity ، نام Activity جدیدی است که وارد آن خواهیم شد و اطلاعات به آن ارسال می گردد.

سپس درون Activity دوم، باید کدهای زیر را بنویسیم :


Bundle extras = getIntent().getExtras();
if (extras != null) {
    String myVariable_2 = extras.getString("key_name");
}

البته شرط if را می توان برداشت. در رشته (String) با نام myVariable_2 ، مقدار مورد نظرمان ذخیره شده است.

نکته

اگر مقدار مورد نظر، یک عدد بوده است (یعنی یک عدد را در رشته ذکر کرده ایم، نه اینکه از جنس int باشد، برای int ، در ادامه توضیحاتی داده شده است)، می توانید از کد زیر، برای تبدیل رشته (string) به عدد، استفاده کنید :


int myVariable_2_new = Integer.parseInt(myVariable_2);
نکته

قبل از دریافت مقدار، می توانیم چک کنیم که آیا اصلا مقداری با آن نام ارسال شده است یا خیر (با دستور if) :


Bundle extras = getIntent().getExtras();
if (extras != null) {
    if(extras.containsKey("key_name")){
        String myVariable_2 = extras.getString("key_name");
    }
}

ارسال یک مقدار از نوع عدد (int) :

درون Activity اول، کدهای زیر را می نویسیم :


Intent intent = new Intent(getApplicationContext(), NewActivity.class);
int myVariable_1 = 1;
intent.putExtra("key_name", myVariable_1);
startActivity(intent);

دقت کنید که NewActivity ، نام Activity جدیدی است که وارد آن خواهیم شد و اطلاعات به آن ارسال می گردد.

سپس درون Activity دوم، باید کدهای زیر را بنویسیم :


Bundle extras = getIntent().getExtras();
if (extras != null) {
    int myVariable_2 = extras.getInt("key_name");
}

البته شرط if را می توان برداشت. در متغیر با نام myVariable_2 (که از نوع int می باشد)، مقدار مورد نظرمان ذخیره شده است.

ارسال یک مقدار از نوعی غیر از رشته (String) یا عدد (int) :

همان طور که مشاهده کردید، در Activity دوم، برای دریافت رشته (String)، از روش getString و برای دریافت عدد (int)، از روش getInt استفاده شد. بنابراین برای هر نوع متغیر، باید تنها روش (method) مربوط به آن را بدانیم. برای پیدا کردن این روش، در برنامه eclipse ، نشانگر موس را بعد از عبارت extras.get برده (کلیک می کنیم تا نشانگر در آنجا قرار بگیرد) و کلیدهای Ctrl و Space را به صورت همزمان از کیبورد فشار می دهیم تا تمامی روش های قابل انتخاب، نمایش داده شوند :

ارسال یک مقدار تنها (رشته یا عدد یا ...) از یک Activity به Activity دیگر، در برنامه نویسی اندروید
نویسنده علیرضا گلمکانی
شماره کلید 236
گزینه ها
به اشتراک گذاری (Share) در شبکه های اجتماعی
نظرات 19 18 1
علی
۱۳۹۵/۰۵/۱۵
۱۴:۲۳

با سلام و تشکر از سایت خوب شما. من یه کد نوشتم که در اون سعی کردم یک دکمه در اکتیویتی اصلی قرار بدم که با لمس اون به اکتیویتی دوم برم و یک استرینگ هم به اکتیویتی دوم ارسال بشه.
اما مشکل اینه که با لمس دکمه وارد اکتیویتی دوم نمیشه. اکتیویتی دوم رو در فایل اندرویدمانی فست تعریف کردم.

admin
۱۳۹۵/۰۵/۱۶
۱۴:۲۹

سلام.
کد زیر را فراموش کردید :



علی
۱۳۹۵/۰۵/۱۶
۲۱:۱۶

مرسی ادمین جان

شهرام
۱۳۹۵/۰۶/۰۹
۱۱:۱۷

سلام شما توی دستور کدی که دادید فقط میشه یک متغیر رو به اکتیویتی بعد فرستاد با درستور StartActivity(intent) حالا سوال اینجاست اگه بخوام دو یا بیشتر متغیر رو بفرستم باید چیکار کنم همون طور که میدونید با این کد نمیشه این کارو کرد .
با تشکر

admin
۱۳۹۵/۰۶/۰۹
۱۲:۴۸

سلام.
می توانید یک آرایه (Array) (از نوع رشته یا عدد یا ...) را ارسال کنید. برای این منظور، کلید زیر را بخوانید :



yassin7980
۱۳۹۷/۰۴/۰۲
۲۰:۰۰

سلام ادمین عزیز 
من در اکتیویتی اول و دومم تعدادی عدد و متن از کاربر گرفتم و میخوام اون هارو ب اکتیویتی سوم انتقال بدم 
از روش آرایه استفاده کردم و هنگام ساخت آرایه به جای عدد ها نام متغیر هامو زدم.
حالا تو اکتیویتی سوم میخوام روی اعدا اعمال ریاضی انجام بدم چجوری میتونم به متغیر هام دسترسی داشته باشم؟

admin
۱۳۹۷/۰۴/۰۳
۱۵:۴۰

سلام.
با توجه به اینکه با اطلاعات موجود در چند Activity سر و کار دارید، توصیه می شود که از ذخیره اطلاعات از طریق SharedPreferences استفاده نمایید تا دیگر ترتیب رفتن به Activity ها و تعداد آنها مهم نباشد :



mahdi2001h
۱۳۹۵/۰۶/۲۳
۱۴:۵۳

سلام
  من در اکتیویتی دوم زمانیکه مقدار int را در قسمتی دیگر دریافت کنم int دریافت شده را پیدا نمی کند  اینهم کد هاش ممنون میشم کمکم کنید

123
۱۳۹۵/۰۶/۳۰
۲۰:۰۸

سلام من میخوام یک کدی بنویسم که تو اکتیویتی اول یک تصویر تصادفی نمایش داده بشه و بعد در اکتیویتی دوم با دستور if بگه که اگه مثلا تصویر x نمایش داده شد فلان کارو بکنه فقط دستو if رو لازم دارم ممنون میشم که کمکم کنید.

sami
۱۳۹۵/۰۷/۰۶
۱۶:۳۸

فکر میکنم باید تصاویرتون رو بصورت آرایه ای از int  تعریف کنید تا بتونید بهش دسترسی پیدا کنید

mohammad javad
۱۳۹۵/۰۷/۲۹
۰۳:۰۳

salam , kheyli mamnoon az amoozeshay khoobetoon
age bekhaym ye tasviro enteqal bedim be activity jadd , az che methodi bayad estefade kard ?
amoozeshi darin too site dar rabete ba qazie ?

admin
۱۳۹۵/۰۸/۰۲
۰۲:۲۴

سلام.
ما در پروژه اندروید، به یک شکل استاندارد، عکس ها را تعریف می کنیم (در پوشه های drawable) و برای ارجاع به آنها، یک عبارت مخصوص به هر عکس داریم (بر اساس نام عکس).
بنابراین شما عبارت مربوط به عکس مورد نظر (یا فقط نام آن یا یک شماره متناظر با آن) را به صورت رشته (string) به Activity مورد نظر (Activity دوم) ارسال کنید و سپس بر اساس آن، در Activity دوم، عکس را شناسایی کرده و کدهای مورد نظرتان را برای آن اجرا نمایید (نیازی به ارسال اطلاعات اصلی عکس (خود عکس) نمی باشد و تنها باید عبارتی را بفرستیم که بر اساس آن بتوانیم عکس را شناسایی کنیم). 
این مورد، برای عکس های قرار گرفته در پوشه assets و یا عکس های قرار گرفته در اینترنت (با آدرس URL) و ... نیز صدق می کند و برای هر حالت، تنها باید یک آدرس از عکس، به Activity دوم ارسال شود.
ممکن است بر اساس نوع تعریف عکس، نیاز باشد که در Activity دوم، رشته (String) دریافت شده به نوع دیگری از متغیرها تبدیل شود (مثلا به int یا ...) تا برای اجرای کدها مناسب باشد.

علی
۱۳۹۵/۰۸/۲۸
۲۲:۴۰

سلام
من یک برنامه اندرویدی ساختم که با کلیک بر روی یک باتن صفحه نصب یک برنامه اندرویدی رو بیاره ونصب کنه ولی هر کاری میکنم انجام نمیشه چجوری باید ارجاش بدم

jef313
۱۳۹۶/۰۴/۰۷
۱۲:۱۱

عالی بود
میخواستم از یک اکتیویتی به اکتیویتی دوم برم و یک نوشته یا عدد را در ادیت تکس بنویسم
ممنون ادمین جان

admin
۱۳۹۶/۰۴/۰۹
۰۷:۱۱

سلام.
برای نوشتن یک عبارت در EditText ، کلید زیر را بخوانید :



و اگر قصد دارید که یک مقدار (رشته یا عدد یا ...) را از یک Activity به Activity دیگر ارسال نمایید، کلید زیر را بخوانید (همین کلید فعلی) :



بنابراین ابتدا مقدار مورد نظر را از یک Activity به Activity دیگر ارسال می کنید و سپس در کدهای Activity دوم، کد مربوط به نمایش آن مقدار در EditText اجرا می گردد.

LORD
۱۳۹۷/۰۲/۰۴
۱۲:۵۴

سلام خسته نباشید

برای اینکه بخوام از  طریق یک اکتیوتی تکست های موجود در اکتیوتی دیگه رو تغییر بدم باید از چه کدی استفاده کنم؟؟

ممنون میشم کمک کنید

admin
۱۳۹۷/۰۲/۰۴
۱۵:۳۹

سلام.
مقادیر مورد نظرتان را توسط SharedPreferences در برنامه اندروید ذخیره کنید و بنابراین می توانید از همه Activity ها به آن مقادیر دسترسی داشته باشید و از همه Activity ها، آن مقادیر را تغییر دهید :



maryam
۱۳۹۷/۰۸/۰۲
۱۹:۲۹

سلام.خسته نباشید.من یک لیست ویو ساختم و می خواهم با کلیک بر روی هر ایتم اطلاعاتش و عکسش در اکتیویتی دیگری نمایش داده شود.با استفاده از intent اطلاعات را انتقال دادم ولی عکس رو نمیدونم چطور بفرستم چون عکس ها در اداپتری که ساختم تعریف کرده ام نه داخل اکتیویتی.لطفا راهنماییم کنید

ارسال نظر جدید (بدون نیاز به عضو بودن در وب سایت)