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; @Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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 stubIntent 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; @Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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 stubString 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; @Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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並得到了連絡人的名字。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.