activity之間參數傳遞

來源:互聯網
上載者:User

 

這一節介紹一下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並得到了連絡人的名字

 

 


摘自 wangkuifeng0118的專欄

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.