startActivityForResult در اندروید
در مورد ارسال اطلاعات به اکتیویتی های دیگر در مبحثی تحت عنوان ارسال مقادیر از یک اکتیویتی به اکتیویتی دیگر اموزش های لازم داده شد. در این مبحث قصد داریم نحوه اجرای یک اکتیویتی را به منظور گرفتن اطلاعات ازیک اکتیویتی دیگر را برای شما کاربران عزیز آموزش دهیم. همانطور که می دانید برای ارسال اطلاعات از یک اکتیویتی به اکتیویتی دیگر از روش intent و startActivity استفاده می کردیم . همچنین است در در مورد گرفتن اطلاعات از یک اکتیویتی دیگر از همان روش intent استفاده می کنیم ولی به جای startActivity از startActivityForResult استفاده می کنیم. در ذیل دو مثال از انچه گفته شد برای شما ارایه می شود:
روشstartActivity:
String myvariable = "red"; Intent i = new Intent(this, MainActivity.class); i.putExtra("key_value", myvariable); startActivity(i);
روش startActivityForResult:
String myvariable = "red"; Intent i = new Intent(); i.setClass(MainActivity.this,Other.class); i.putExtra("key_Color", myvariable); startActivityForResult(i, 1);
در مقایسه بین این دو می توان گفت که در روش startActivity صرفاْ اطلاعات از یک اکتیویتی به دیگر ارسال می شود بدون اینکه اکتیویتی مبدا یا فرستنده منتظر دریافت نتایج از اجرای آن در اکتیویتی دیگر باشد. این در حالی است که در startActivityForResult افزون بر انتقال اطلاعات به اکتیویتی دیگر، نتایج حاصل از اجرای آن کدها در اکتیویتی ثانویه به اکتیویتی اولیه برگشت داده می شود. فلذا لازم است در اکتیویتی اولیه از روشی بهره بگیرییم که بتواند بازخورد لازم را از اکتیویتی ثانویه دریافت کند:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data);
}
در اکتیویتی ثانویه انچه ضروری می نماید در گام نخست دریافت اطلاعات فرستاده شده از اکتیویتی اولیه است.بدین منظور بعد از دریافت اطلاعات در اکتیویتی ثانویه بر حسب تمهیدات برنامه نویس دستورات لازم در ارتباط با آن اطلاعات اجرا می شود :
String colortext = getIntent().getStringExtra("key_Color"); TextView txt1 = (TextView) findViewById(R.id.textView10); ChangeColorText(ActivityResult);
private void ChangeColorText() { if (color.equals("red")) { txt1.setTextColor(Color.RED); result = "change the text color to red color"; } else if (color.equals("green")) { result = "change the text color to green color"; txt1.setTextColor(Color.RED); }
بعد از اجرای آن اطلاعات در اکتیویتی ثانویه نتایج حاصل از آن اجرا به اکتیویتی اولیه برگردانده می شود.به منظور انعکاس نتایج عملیات به اکتیویتی اولیه از متد دیگری با نام setResult بهره می گیریم که اختصاصاً به همین منطور استفاده می شود :
Intent BackIntent = new Intent(); BackIntent.putExtra("ActivityResult",result); setResult(RESULT_OK,BackIntent); finish();
اما در اکتیویتی اولیه به منظور تفسیر نتایج حاصل از اطلاعات ارسال شده همان طور که در فوق بیان گردید متد onActivityResult را داریم :
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){ textview.setText(data.getStringExtra("ActivityResult")); }
}
به منظور درک کامل موضوع مثالی برایتان خواهیم زد(به زودی).
2 دیدگاه
جعفر · ژانویه 1, 2018 در 2:12 ب.ظ
جالب بود
لطفا مطلب را کاملتر کنید
حامد قنبری · ژانویه 1, 2018 در 2:22 ب.ظ
چشم. به زودی