باز یابی مقادیر از  یک  Activity

باز یابی مقادیر از یک Activity

بسم الله الرحمن الرحیم

بسم الله الرحمن الرحیم

باز یابی مقادیر از  یک  Activity

فصل دوم-بخش  هشتم

متد startActivity()  یک activity  دیگرا  اجرا  می  کند ولی  نتیجه  یا داده های  از ان activity  به activity  جاری باز نمی گرداند. به  عنوان مثال  ممکن دریک activity   کاربر  UserName و Password  خود را وارد کنند  و هنگام باز گشت  به activity  جاری  username  و  passoword  چک  شود در صورت درست بودن برنامه  به کار خود ادامه  داده و امکانات بیشتری را به کاربر ارائه دهد. در  صورتی که شما  نیاز دارید داده های  مورد نیاز خود را از  activity  دیگر  باز گردانی کنید   شما باید از متدstartActivityForResult() استفاده کنید. در زیر آن را با یک مثال شرح می دهیم.

فایل   secondactivity.xml  به صورت تغییر دهید

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="This is the Second Activity!" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Please enter your name" />
<EditText
android:id="@+id/txt_username"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn_OK"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="onClick" />
</LinearLayout>

و دستورات به   فایلSecondActivity  اضافه کنید

package com.MehrdadJavidi.usingintent;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
public class SecondActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.secondactivity);
}
public void onClick(View view) {
Intent data = new Intent();
/** ---get the EditText view---*/
EditText txt_username = (EditText) findViewById(R.id.txt_username);
/** ---set the data to pass back---*/
data.setData(Uri.parse(txt_username.getText().toString()));
setResult(RESULT_OK, data);
/** ---closes the activity---*/
finish();
}
}

حالا دستورات زیر را  فایل UsingIntentActivity.java اضافه کنید

package com.MehrdadJavidi.usingintent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class UsingIntentActivity extends Activity {
int request_Code = 1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClick(View view) {
/** startActivity(new Intent("com.MehrdadJavidi.SecondActivity"));*/
/** or*/
/** startActivity(new Intent(this, SecondActivity.class));*/
startActivityForResult(new Intent("com.MehrdadJavidi.SecondActivity"),
request_Code);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == request_Code) {
if (resultCode == RESULT_OK) {
Toast.makeText(this, data.getData().toString(),
Toast.LENGTH_SHORT).show();
}
}
}
}

حالا F11 را زده تا برنامه  اجرا شود. حالا  بر روی Button کلیک  کنید.

SecoundActivity  حالا  اجرا شده.

نام کاربری مورد نظر را  وارد کنید  و برو روی ok کلیک  کنید. به activity  اول باز  می گردیم.

و  نام کاربری را  به کمک کلاس Toast  نمایش می دهیم.

ارسال داده های بینActivity های مختلف

برای باز گرداندن داده ها از Activity دیگر شما باید متد  مانندstartActivityForResult()  زیر استفاده کنید

startActivityForResult(new Intent("com.MehrdadJavidi.SecondActivity"),
request

در اینجا شما  باید علاوه بر  ارسال کردن پارامتر Intent  باید  یک  پارامتر دیگر به نام   request cod را  نیز ارسال کنید.

Request code    به طور ساده یک عدد integer  می باشد  . این request code  بسیار لازم می باشد  زیرا به وسیله آن می توانی متوجه شویم که کدام  activity   این در خواست را کرده است.

به عنوان مثال شما ممکن چندین Activity را  در یک زمان فراخوانی کنید. ممکن بعضی از این activity  ها  مقداری را برگردانند  که به وسیله request Code  آن را تشخیص می دهیم.

 

شما  برای  ارسال داده ها به activity  صدا زننده   از  یک   شی Intent  استفاده کرده و  با متد setData   داده های  مورد نظر را ار سال  می کنیم.

Intent data = new Intent();
/** ---get the EditText view---*/
EditText txt_username = (EditText) findViewById(R.id.txt_username);
/** ---set the data to pass back---*/
data.setData(Uri.parse(txt_username.getText().toString()));
setResult(RESULT_OK, data);
/** ---closes the activity---*/
finish();

سپس  متد setResult() , request code   (که یک از مقادیر RESULT_OK or RESULT_CANCELLED))و   داده  مورد نظر ما (که یک شی intent م می باشد ) را  برا بازگشت به activity   صدا زننده  تنظیم می  کند.و متد finish()   برای بستن activyt  جاری  استفاده می کنیم. که  پس از بستن activity  جاری به activity  صدا زننده  باز می گردیم.

در activity  صدا زننده  شما باید  متد   onActivityResult()را    به کار  گیرید . که این متد هر زمان که activity  مقدار بر می گرداند صدا زده می شود.


public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == request_Code) {
if (resultCode == RESULT_OK) {
Toast.makeText(this, data.getData().toString(),
Toast.LENGTH_SHORT).show();
}
}
}

و شما  در اینجا کد مورد نظر را بازیابی  داده اختصاص می دهید.  داده های باز گردانده شده در  پارا متر data  می باشد. که برای  بدست آوردن جزئیات  شما می توانید از ممتد getData استفاده  کنید.

نظرات یا سوالات خودرا با ما درمیان بگذارید

0912 097 5516 :شماره تماس
0713 625 1757 :شماره تماس