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); } }
启动,看一下运行效果:

activity之间参数传递

点击发送按钮:

activity之间参数传递

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得到联系人信息这一节

看一下运行效果:


activity之间参数传递

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

activity之间参数传递


返回到了ResultDemoActivity并得到了联系人的名字。