activity之间参数传递

来源:互联网 发布:python 示例 编辑:程序博客网 时间:2024/05/02 01:42

 这一节介绍一下activity之间参数传递。我们知道用intent可以实现activity之间相互跳转,在跳转的同时我们不免也需要传递一些参数,下面就介绍一下如何在一个activity里传递参数,在另一个activity里接受参数。

           activity之间有两种参数传递形式:一种是一个activity启动另一个activity的时候传递数据到另一个activity,然后在activity中接受到数据,做相应处理。另一种是一个activity启动另个一activity传递数据,当另个一activity窗口关闭后,在传递数据到启动它的那个activity。

          我们先看一下第一种方式

         首先先建立一个ActivityDemo项目:

     

[java] view plaincopy
  1. public class MainDemoActivity extends Activity {  
  2.    private Button button1,button2;  
  3.      @Override  
  4.     protected void onCreate(Bundle savedInstanceState) {  
  5.         // TODO Auto-generated method stub  
  6.         super.onCreate(savedInstanceState);  
  7.         setContentView(R.layout.main);  
  8.           
  9.         button1=(Button) this.findViewById(R.id.button1);  
  10.         button2=(Button) this.findViewById(R.id.button2);  
  11.           
  12.         button1.setOnClickListener(new MyListener());  
  13.         button2.setOnClickListener(new MyListener());  
  14.     }  
  15.      private class MyListener implements View.OnClickListener{  
  16.   
  17.         public void onClick(View v) {  
  18.             // TODO Auto-generated method stub  
  19.             Intent intent=new Intent();  
  20.             if(v==button1){  
  21.              intent.setClass(MainDemoActivity.this, FirstDemoActivity.class);  
  22.             }else if(v==button2){  
  23.              intent.setClass(MainDemoActivity.this, ResultDemoActivity.class);  
  24.             }  
  25.             startActivity(intent);  
  26.         }  
  27.            
  28.      }  
  29. }  

   接着给出main.xml

  

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <Button  
  8.         android:id="@+id/button1"  
  9.         android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content"  
  11.         android:text="传递参数不得到返回值" />  
  12.   
  13.     <Button  
  14.         android:id="@+id/button2"  
  15.         android:layout_width="wrap_content"  
  16.         android:layout_height="wrap_content"  
  17.         android:text="传递参数得到返回值" />  
  18.     
  19. </LinearLayout>  

    看一下第一种是怎么传递参数的:

 

[java] view plaincopy
  1. public class FirstDemoActivity extends Activity {  
  2.    private Button button3;  
  3.    private EditText editText;  
  4.      @Override  
  5.     protected void onCreate(Bundle savedInstanceState) {  
  6.         // TODO Auto-generated method stub  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.first);  
  9.           
  10.         button3=(Button) this.findViewById(R.id.button3);  
  11.         editText=(EditText) this.findViewById(R.id.editText1);  
  12.         button3.setOnClickListener(new View.OnClickListener() {  
  13.               
  14.             public void onClick(View v) {  
  15.                 // TODO Auto-generated method stub  
  16.                 String content=editText.getText().toString();  
  17.               Intent intent=new Intent(FirstDemoActivity.this,SecondDemoActivity.class);  
  18.               //可以把要传递的参数放到一个bundle里传递过去,bundle可以看做一个特殊的map.  
  19.               Bundle bundle=new Bundle();  
  20.               bundle.putString("result""第一个activity的内容");  
  21.               bundle.putString("content",content);  
  22.               intent.putExtras(bundle);  
  23.               //也可以用这种方式传递.  
  24.               //intent.putExtra("result", "第一个activity的内容");  
  25.                 
  26.               startActivity(intent);  
  27.             }  
  28.         });  
  29.     }  
  30. }  
   

      看一下在SecondDemoActivity中怎么接受参数:
    

[java] view plaincopy
  1. public class SecondDemoActivity extends Activity {  
  2.     private TextView textView;  
  3.      @Override  
  4.     protected void onCreate(Bundle savedInstanceState) {  
  5.         // TODO Auto-generated method stub  
  6.         super.onCreate(savedInstanceState);  
  7.         setContentView(R.layout.second);  
  8.           
  9.         textView=(TextView) this.findViewById(R.id.textView3);  
  10.         Intent intent=getIntent();  
  11.         String result=intent.getStringExtra("result");  
  12.         String content=intent.getStringExtra("content");  
  13.         textView.setText(result+" : "+content);  
  14.     }  
  15. }  
    
      启动,看一下运行效果:

     

     点击发送按钮:

    

      OK!  成功。 

      接下来看看第二种方式:

    先看一下页面的布局文件:

  

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <TextView  
  8.         android:id="@+id/text"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="wrap_content"  
  11.         android:text="@string/hello" />  
  12.   
  13. </LinearLayout>  

     核心代码:

  

[java] view plaincopy
  1. public class ResultDemoActivity extends Activity {  
  2.     /** Called when the activity is first created. */  
  3.     private TextView text;  
  4.     @Override  
  5.     public void onCreate(Bundle savedInstanceState) {  
  6.         super.onCreate(savedInstanceState);  
  7.         setContentView(R.layout.result);  
  8.           
  9.         text=(TextView)this.findViewById(R.id.text);  
  10.         pickContact();  
  11.     }  
  12.     private void pickContact(){  
  13.         Intent intent=new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);  
  14.           //在这里也可以传递一些参数  
  15.         //intent.putExtra(name, value)  
  16.         //第二个参数就是onActivityResult 里得第一个参数。  
  17.         startActivityForResult(intent,1);  
  18.     }  
  19.   
  20.     @Override  
  21.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  22.         // TODO Auto-generated method stub  
  23.         if(resultCode==Activity.RESULT_OK && requestCode==1){  
  24.             Cursor cusor=this.getContentResolver()  
  25.                 .query(data.getData(), new String[]{ContactsContract.Contacts.DISPLAY_NAME},  
  26.                         nullnullnull);  
  27.             if(cusor.moveToFirst()){  
  28.                 String str=cusor.getString(cusor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));  
  29.                 text.setText(str);  
  30.             }  
  31.         }  
  32.     }  
  33. }  

   代码我想大家都看的懂吧!不懂得看我以前的使用Content Provider得到联系人信息这一节

    看一下运行效果:

    

   

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

    

     

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

原创粉丝点击