باز یابی مقادیر از یک 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 دیگر شما باید متد مانند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 استفاده کنید.