Forwarded from Deleted Account
#Android_Studio
#Activity
#Intent #Result #Bundle
#Save #Restore #State
✅ اکتیویتی ها
بخش سیزدهم
❇️ جابجایی بین اکتیویتی ها
🌀 متد startActivityForResult
بر خلاف حالت قبل که در پست پیشین گفته شد، گاهی اوقات شما می خواهید تا پس از اینکه اکتیویتی جدیدی را اجرا کردید و کار با آن تمام شد، مقداری(نتیجه ای) از آن اکتیویتی برگردد. به عنوان نمونه، فرض کنید شما یک اکتیویتی را اجرا می کنید که به کاربر اجازه می دهد تا از بین افرادی که در لیست مخاطبین هستند، یک نفر را انتخاب کند.بنابراین هر زمان که اکتیویتی به پایان رسید، می بایست فرد انتخاب شده را به عنوان نتیجه برگرداند.برای انجام چنین کاری، باید از متد
startActivityForResult(Intent, int)
استفاده کنید. شما ممکن است از همین اکتیویتی فعلی تان، چندین بار ازین متد برای کارهای مختلف استفاده کنید و بدیهی است که نتایج مختلفی را از اکتیویتی ها دریافت کنید. بنابراین برای این که بین این نتایجِ دریافتی ابهامی به وجود نیاید و بتوانید تشخیص دهید که هر نتیجه مربوط به کدام عملیات و اکتیویتی می باشد، در این متد، پارامتر دوم که یک عدد صحیح است، به عنوان یک شناسه عمل می کند تا برای هر اجرایی که با این متد انجام می دهید، یک شناسه وجود داشته باشد و بتوانید بر اساس همین شناسه به نتایج مربوط دسترسی پیدا کنید. پس، در هر بار اجرای این متد، شما باید یک عدد منحصر به فرد به عنوان پارامتر دوم این متد انتخاب کنید. این شناسه، یک شناسه سراسری نمی باشد و با سایر اکتیویتی ها و برنامه ها ناسازگاری(تناقضی) ندارد.
در نهایت، نتیجه حاصل از این متد را می توان در متد
onActivityResult(int, int, Intent)
مدیریت کرد.
هنگامی که اکتیویتی فرزند(همان که توسط اکتیویتی دیگری اجرا شده است)، به پایان رسید، می تواند از طریق فراخوانی متد
setResult(int)
داده(نتیجه) مورد نظر را به اکتیویتی والد برگرداند. اکتیویتی فرزند، همیشه باید کدی را برای نتیجه آماده کند.این کد می تواند یکی از کدهای استاندارد نتایج باشد(هم چونRESULT_CANCELED وRESULT_OK) و یا هر مقدار دلخواه دیگر. افزون بر این ها، اکتیویتی فرزند می تواند به صورت اختیاری، از اینتنت برای برگرداندن داده ها استفاده نماید. اکتیویتی والد هم با استفاده از متد
onActivityResult(int, int, Intent)
و با استفاده از همان شناسه ای که گفتیم باید منحصر به فرد باشد، اطلاعات را از اکتیویتی فرزند می گیرد.
اگر اکتیویتی فرزند به هر دلیلی نتواند اجرا شود یا نتیجه برگرداند(مانند کِرَش کردن)، آنگاه اکتیویتی والد یک نتیجه با کدRESULT_CANCELED دریافت می کند.
👈 مثال:
public class MyActivity extends Activity {
...
static final int PICK_CONTACT_REQUEST = 0;
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
// When the user center presses, let them pick a contact.
startActivityForResult(
new Intent(Intent.ACTION_PICK,
new Uri("content://contacts")),
PICK_CONTACT_REQUEST);
return true;
}
return false;
}
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == PICK_CONTACT_REQUEST) {
if (resultCode == RESULT_OK) {
// A contact was picked. Here we will just display it
// to the user.
startActivity(new Intent(Intent.ACTION_VIEW, data));
}
}
}
}
در این کد، ثابت
PICK_CONTACT_REQUEST = 0
همان شناسه منحصر به فرد می باشد.
با توجه به مطالب گفته شده، روش کار این قطعه کد، بسیار واضح است و نیازی به توضیح بیشتر نمی باشد.
🔵 ادامه دارد...
#Activity
#Intent #Result #Bundle
#Save #Restore #State
✅ اکتیویتی ها
بخش سیزدهم
❇️ جابجایی بین اکتیویتی ها
🌀 متد startActivityForResult
بر خلاف حالت قبل که در پست پیشین گفته شد، گاهی اوقات شما می خواهید تا پس از اینکه اکتیویتی جدیدی را اجرا کردید و کار با آن تمام شد، مقداری(نتیجه ای) از آن اکتیویتی برگردد. به عنوان نمونه، فرض کنید شما یک اکتیویتی را اجرا می کنید که به کاربر اجازه می دهد تا از بین افرادی که در لیست مخاطبین هستند، یک نفر را انتخاب کند.بنابراین هر زمان که اکتیویتی به پایان رسید، می بایست فرد انتخاب شده را به عنوان نتیجه برگرداند.برای انجام چنین کاری، باید از متد
startActivityForResult(Intent, int)
استفاده کنید. شما ممکن است از همین اکتیویتی فعلی تان، چندین بار ازین متد برای کارهای مختلف استفاده کنید و بدیهی است که نتایج مختلفی را از اکتیویتی ها دریافت کنید. بنابراین برای این که بین این نتایجِ دریافتی ابهامی به وجود نیاید و بتوانید تشخیص دهید که هر نتیجه مربوط به کدام عملیات و اکتیویتی می باشد، در این متد، پارامتر دوم که یک عدد صحیح است، به عنوان یک شناسه عمل می کند تا برای هر اجرایی که با این متد انجام می دهید، یک شناسه وجود داشته باشد و بتوانید بر اساس همین شناسه به نتایج مربوط دسترسی پیدا کنید. پس، در هر بار اجرای این متد، شما باید یک عدد منحصر به فرد به عنوان پارامتر دوم این متد انتخاب کنید. این شناسه، یک شناسه سراسری نمی باشد و با سایر اکتیویتی ها و برنامه ها ناسازگاری(تناقضی) ندارد.
در نهایت، نتیجه حاصل از این متد را می توان در متد
onActivityResult(int, int, Intent)
مدیریت کرد.
هنگامی که اکتیویتی فرزند(همان که توسط اکتیویتی دیگری اجرا شده است)، به پایان رسید، می تواند از طریق فراخوانی متد
setResult(int)
داده(نتیجه) مورد نظر را به اکتیویتی والد برگرداند. اکتیویتی فرزند، همیشه باید کدی را برای نتیجه آماده کند.این کد می تواند یکی از کدهای استاندارد نتایج باشد(هم چونRESULT_CANCELED وRESULT_OK) و یا هر مقدار دلخواه دیگر. افزون بر این ها، اکتیویتی فرزند می تواند به صورت اختیاری، از اینتنت برای برگرداندن داده ها استفاده نماید. اکتیویتی والد هم با استفاده از متد
onActivityResult(int, int, Intent)
و با استفاده از همان شناسه ای که گفتیم باید منحصر به فرد باشد، اطلاعات را از اکتیویتی فرزند می گیرد.
اگر اکتیویتی فرزند به هر دلیلی نتواند اجرا شود یا نتیجه برگرداند(مانند کِرَش کردن)، آنگاه اکتیویتی والد یک نتیجه با کدRESULT_CANCELED دریافت می کند.
👈 مثال:
public class MyActivity extends Activity {
...
static final int PICK_CONTACT_REQUEST = 0;
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
// When the user center presses, let them pick a contact.
startActivityForResult(
new Intent(Intent.ACTION_PICK,
new Uri("content://contacts")),
PICK_CONTACT_REQUEST);
return true;
}
return false;
}
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == PICK_CONTACT_REQUEST) {
if (resultCode == RESULT_OK) {
// A contact was picked. Here we will just display it
// to the user.
startActivity(new Intent(Intent.ACTION_VIEW, data));
}
}
}
}
در این کد، ثابت
PICK_CONTACT_REQUEST = 0
همان شناسه منحصر به فرد می باشد.
با توجه به مطالب گفته شده، روش کار این قطعه کد، بسیار واضح است و نیازی به توضیح بیشتر نمی باشد.
🔵 ادامه دارد...