Android学习(Activity之间的参数传递)

本文介绍Android中Activity之间两种参数传递方法:直接传递与通过回调返回。包括代码示例及运行效果展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

activity之间参数传递
2011-12-03 15:22:24      我来说两句 
收藏    我要投稿    [字体: ]

 

这一节介绍一下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 <activity Android:name=".Activity1"
2     Android:label="@string/app_name">
3     <intent-filter>
4         <action Android:name="android.intent.action.MAIN" />
5         <category Android:name="android.intent.category.LAUNCHER" />
6     </intent-filter>
7 </activity>
8 <activity Android:name=".Activity2" ></activity>

2. [代码]Activity1     

01 //在按键按下后,调用第二个实体,第二个实体处理完数据后再传给第一个实体
02 btn3.setOnClickListener(new Button.OnClickListener() {
03     public void onClick(View v) {
04         final int RG_REQUEST = 0;
05         Intent intent = new Intent();
06             //作为接受数据端
07         intent.setClass(Activity1.this, Activity2.class);
08         startActivityForResult(intent, RG_REQUEST);
09                /////////////////////
10         }
11     });
12 }
13 //处理接收的数据
14 protected void onActivityResult(int requestCode,int resultCode,Intent data)
15 {
16  
17     super.onActivityResult(requestCode, resultCode, data)
18  
19     if(resultCode==RESULT_OK)
20     {
21         //接收数据
22         Bundle bundle =data.getExtras();
23         double aplpa=bundle.getDouble("aplpa");
24         String mode=bundle.getString("mode");
25         String time=bundle.getString("time");
26     }
27 }

3. [代码]Activity2     

01 // //////////////////
02 // 点击按键后,确认返回处理
03 // ////////////
04 btn1.setOnClickListener(new Button.OnClickListener() {
05 public void onClick(View arg0) {
06     // TODO Auto-generated method stub
07     Bundle bundle = new Bundle();
08     bundle.putInt("time", time);
09     bundle.putInt("alpha", aplpa);
10     bundle.putInt("mode", mode);
11     Intent intent = new Intent(Activity2.this,Activity1.class);
12     intent.putExtras(bundle);
13     setResult(RESULT_OK, intent);
14     Activity.this.finish();
15 }
16 });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值