Android學習筆記(五)

來源:互聯網
上載者:User

標籤:

Intent不僅用來啟動一個活動,Intent還可以在啟動活動的時候傳遞參數。

1.向下一個活動傳遞資料

啟動活動的時候傳遞資料,Intent提供了一系列putExtra()方法的重載,可以把要傳遞的資料暫存在Intent中,啟動了另一個活動後,

只需要把這些資料再從Intent中取出就可以了。

例如FirstActivity中有一個字串,現在把這個字串傳遞到SecondActivity中,代碼如下:

button1.setOnClickListener(new OnClickListener() {                @Override    public void onClick(View v) {    String data = "Hello SecondActivity";    Intent intent = new Intent(FirstActivity.this,SecondActivity.class);    intent.putExtra("extra_data", data);    startActivity(intent);                            }        });

上面的代碼中用顯示Intent方式來啟動SecondActivity,然後通過putExtra()方法傳遞了一個字串。

putExtra()方法接收兩個參數,第一個參數是鍵,用於後面從Intent中取值,第二個參數是真正要傳遞的資料。

 

然後在SecondActivity中將傳遞的參數取出,並列印出來,代碼如下:

    protected void onCreate(Bundle savedInstanceState){        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.second_layout);            Intent intent = getIntent();            String data = intent.getStringExtra("extra_data");            Log.d("SecondActivity", data);}

上述的代碼中,通過getIntent()方法擷取到用於啟動SecondActivity的Intent,通過getStringExtra()方法,傳入相應的索引值,就可以得到傳遞的資料了。

注意:傳遞字串用getStringExtra();  整型資料用getIntExtra();傳遞布爾型資料用getBooleanExtra()。

 

2.返回資料給上一個活動

Activity中有一個startActivityForResult()方法也可以用來啟動活動,

startActivityForResult (Intent intent, int requestCode)方法接收兩個參數:
                 * 第一個參數還是Intent;
                 * 第二個參數是請求碼,用來在之後的回調中判斷資料的來源。

修改FirstActivity中按鈕的事件,代碼如下:

button1.setOnClickListener(new OnClickListener() {                @Override    public void onClick(View v) {    Intent intent = new Intent(FirstActivity.this,SecondActivity.class);    //請求碼只要是一個唯一值就可以。    startActivityForResult(intent, 1);                            }        });

這裡,使用startActivityForResult()方法來啟動SecondActivity,請求碼只要是一個唯一值就可以。
然後修改SecondActivity中按鈕的點擊事件,並添加返回資料的邏輯代碼,代碼如下:

        button2.setOnClickListener(new OnClickListener() {                        @Override            public void onClick(View v) {                Intent intent = new Intent();                intent.putExtra("data_return", "Hello FirstActivity");                //調用setResult()方法,該方法專門用於向上一個活動返回資料的。                //setResult()方法接收首歌參數,第一個參數用於向上一個活動返回處理結果,一般使用RESULT_OK或RESULT_CANCELED                //第二個參數是把帶有資料的Intent傳遞迴去,然後調用finish()方法來銷毀當前活動。                setResult(RESULT_OK, intent);                finish();                            }        });

上述代碼中還是要建立一個Intent,這個Intent僅僅用來傳遞資料,它沒有指定任何意圖。把要傳遞的資料存放在Intent中,然後調用setResult()方法

接收兩個參數。

調用setResult()方法,該方法專門用於向上一個活動返回資料的。setResult()方法接收兩個參數,

          *第一個參數用於向上一個活動返回處理結果,一般使用RESULT_OK或RESULT_CANCELED
          *第二個參數是把帶有資料的Intent傳遞迴去,然後調用finish()方法來銷毀當前活動。

 

 因為使用startActivityForResult()方法來啟動SecondActivity活動的,在SecondActivity被銷毀之後會回調上一個活動的onActivityResult()方法,所以需要在FirstActivity中重寫onActivityResult()方法來得到返回資料。onActivityResult (int requestCode, int resultCode, Intent data)方法帶有三個參數:
     * 第一個參數:requestCode,是在啟動活動時傳入的請求碼;
     * 第二個參數:resultCode,返回資料時傳入的處理結果。
     * 第三個參數:data,帶有返回資料的Intent。
在一個活動中有可能調用startActivityForResult()方法去啟動不同的活動,每一個活動返回的資料都會回調到onActivityResult() 這個方法中,所以首先檢查requestCode的值來判斷資料來源,然後在通過resultCode的值來判斷處理結果是否成功, 最後在從Intent中取返回的資料。

如果在SecondActivity中不是通過按鈕返回FirstActivity,而是通過Back鍵返回,這樣怎麼返回資料呢?
在這裡,如果通過Back鍵返回資料,可以通過在SecondActivity中重寫onPressed()方法來返回資料,代碼如下:

//如果不是通過SecondActivity中的按鈕在返回,而是通過按鈕Back鍵來返回,這就需要重寫onBackPressed()方法來返回資料    public void onBackPressed(){        Intent intent = new Intent();        intent.putExtra("data_return", "Hello FirstActivity");        setResult(RESULT_OK, intent);        finish();    }

這樣,當使用者按下Back鍵,程式就會執行onPressed()方法。

 

Android學習筆記(五)

聯繫我們

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