- activity之间参数传递
-
这一节介绍一下activity之间参数传递。我们知道用intent可以实现activity之间相互跳转,在跳转的同时我们不免也需要传递一些参数,下面就介绍一下如何在一个activity里传递参数,在另一个activity里接受参数。
activity之间有两种参数传递形式:一种是一个activity启动另一个activity的时候传递数据到另一个activity,然后在activity中接受到数据,做相应处理。另一种是一个activity启动另个一activity传递数据,当另个一activity窗口关闭后,在传递数据到启动它的那个activity。
我们先看一下第一种方式
首先先建立一个ActivityDemo项目:
public class MainDemoActivity extends Activity {
private Button button1,button2;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button1=(Button) this.findViewById(R.id.button1);
button2=(Button) this.findViewById(R.id.button2);
button1.setOnClickListener(new MyListener());
button2.setOnClickListener(new MyListener());
}
private class MyListener implements View.OnClickListener{
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent=new Intent();
if(v==button1){
intent.setClass(MainDemoActivity.this, FirstDemoActivity.class);
}else if(v==button2){
intent.setClass(MainDemoActivity.this, ResultDemoActivity.class);
}
startActivity(intent);
}
}
}
接着给出main.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" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="传递参数不得到返回值" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="传递参数得到返回值" />
</LinearLayout>
看一下第一种是怎么传递参数的:
public class FirstDemoActivity extends Activity {
private Button button3;
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.first);
button3=(Button) this.findViewById(R.id.button3);
editText=(EditText) this.findViewById(R.id.editText1);
button3.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
String content=editText.getText().toString();
Intent intent=new Intent(FirstDemoActivity.this,SecondDemoActivity.class);
//可以把要传递的参数放到一个bundle里传递过去,bundle可以看做一个特殊的map.
Bundle bundle=new Bundle();
bundle.putString("result", "第一个activity的内容");
bundle.putString("content",content);
intent.putExtras(bundle);
//也可以用这种方式传递.
//intent.putExtra("result", "第一个activity的内容");
startActivity(intent);
}
});
}
}
看一下在SecondDemoActivity中怎么接受参数:
public class SecondDemoActivity extends Activity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
textView=(TextView) this.findViewById(R.id.textView3);
Intent intent=getIntent();
String result=intent.getStringExtra("result");
String content=intent.getStringExtra("content");
textView.setText(result+" : "+content);
}
}
启动,看一下运行效果:

点击发送按钮:

OK! 成功。
接下来看看第二种方式:
先看一下页面的布局文件:
<?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:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
</LinearLayout>
核心代码:
public class ResultDemoActivity extends Activity {
/** Called when the activity is first created. */
private TextView text;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.result);
text=(TextView)this.findViewById(R.id.text);
pickContact();
}
private void pickContact(){
Intent intent=new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
//在这里也可以传递一些参数
//intent.putExtra(name, value)
//第二个参数就是onActivityResult 里得第一个参数。
startActivityForResult(intent,1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if(resultCode==Activity.RESULT_OK && requestCode==1){
Cursor cusor=this.getContentResolver()
.query(data.getData(), new String[]{ContactsContract.Contacts.DISPLAY_NAME},
null, null, null);
if(cusor.moveToFirst()){
String str=cusor.getString(cusor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
text.setText(str);
}
}
}
}
代码我想大家都看的懂吧!不懂得看我以前的使用Content Provider得到联系人信息这一节
看一下运行效果:

这是我通讯录的联系人。点击listview:

返回到了ResultDemoActivity并得到了联系人的名字
1<activityAndroid:name=".Activity1"2Android:label="@string/app_name">3<intent-filter>4<actionAndroid:name="android.intent.action.MAIN"/>5<categoryAndroid:name="android.intent.category.LAUNCHER"/>6</intent-filter>7</activity>8<activityAndroid:name=".Activity2"></activity>2. [代码]Activity1
01//在按键按下后,调用第二个实体,第二个实体处理完数据后再传给第一个实体02btn3.setOnClickListener(newButton.OnClickListener() {03publicvoidonClick(View v) {04finalintRG_REQUEST =0;05Intent intent =newIntent();06//作为接受数据端07intent.setClass(Activity1.this, Activity2.class);08startActivityForResult(intent, RG_REQUEST);09/////////////////////10}11});12}13//处理接收的数据14protectedvoidonActivityResult(intrequestCode,intresultCode,Intent data)15{1617super.onActivityResult(requestCode, resultCode, data)1819if(resultCode==RESULT_OK)20{21//接收数据22Bundle bundle =data.getExtras();23doubleaplpa=bundle.getDouble("aplpa");24String mode=bundle.getString("mode");25String time=bundle.getString("time");26}27}3. [代码]Activity2
01// //////////////////02// 点击按键后,确认返回处理03// ////////////04btn1.setOnClickListener(newButton.OnClickListener() {05publicvoidonClick(View arg0) {06// TODO Auto-generated method stub07Bundle bundle =newBundle();08bundle.putInt("time", time);09bundle.putInt("alpha", aplpa);10bundle.putInt("mode", mode);11Intent intent =newIntent(Activity2.this,Activity1.class);12intent.putExtras(bundle);13setResult(RESULT_OK, intent);14Activity.this.finish();15}16});
本文介绍Android中Activity之间两种参数传递方法:直接传递与通过回调返回。包括代码示例及运行效果展示。
966

被折叠的 条评论
为什么被折叠?



