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 ب.ظ

    چشم. به زودی

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

-- بارگیری کد امنیتی --