这一节介绍一下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并得到了联系人的名字。