Android學習之Intent傳遞資料

來源:互聯網
上載者:User

標籤:

Intent在Activity中的作用主要是有兩個:

1、啟動目標Activity

2、傳遞資料

Intent在傳遞資料時分兩種情況:向下一個Activity傳遞資料和從下一個Activity返回資料。

一、向下一個Activity傳遞資料主要是利用Intent作為“信使”來調用,

原Activity需要建立一個intent,並用putExtra(鍵,值)方法向intent中放入需要傳遞的資訊,然後啟動。

public void onClick(View view){      String msg = "hello,SecondActivity";      Intent intent = new Intent(FirstActivity.this,SecondActivity.class);      intent.putExtra("amsg",meg);      startActivity(intent);       }

 

 那麼在目標Activity中則需要對發來的intent進行解析,得到其中的資訊,並將其擷取。

Intent intent = getIntent();//擷取傳來的intent對象String data = intent.getStringExtra("amsg");//擷取索引值對的鍵名Log.d("SecondActivity",data);//在logcat中可以得到顯示結果

 過程:擷取傳來的intent——擷取其中的資訊——顯示

二、返回資料給上一個活動

從目標Activity傳遞到原Activity,存在的問題是可能存在目標與原始一對多的情況,那麼就需要“約定的暗號”來進行傳遞,否則Activity不知道將資料回傳給誰。

Android為此提供了一個方法startActivityForResult(intent,requestCode),這個方法要求活動銷毀時返回資料到上一個Activity,requestCode用來判斷資料的來源,其必須保持唯一性,才可以精確的配對。下面是FirstActivity下點擊事件的代碼:

@Override            public void onClick(View view) {                Intent intent = new Intent(FirstActivity.this,SecondActivity.class);                startActivityForResult(intent,1);            }

而在SecondActivity中則需要提供資料相關資訊,並設定自身的“辨識碼”,用來與上一個Activity進行配對使用:

@Override            public void onClick(View view) {                Intent intent = new Intent();                intent.putExtra("datatrans","來自第二個Activity的資料顯示");                setResult(RESULT_OK,intent);                finish();            }

注意到此處的intent只是用來回傳資料,而setResult(結果,intent)方法則是專門來向上一個活動返回資料的,結果表示的是處理結果,一般為RESULT_OK或者RESULT_CANCEL兩種,而intent則是把資料傳遞迴去。

在第一步的startActivityForResult方法來啟動SecondActivity後,當SecondActivity被銷毀時,需要回調FirstActivity中的onActivityResult方法,故需要在FirstActivity中重寫該方法:

@Override    public void onActivityResult(int requestCode,int resultCode,Intent data){        switch (requestCode){            case 1:                if(resultCode == RESULT_OK){                    String data1 = data.getStringExtra("datatrans");                    Log.d("FirstActivity",data1);                }                break;            case 2:                if (resultCode == RESULT_CANCELED){                    String data2 = data.getStringExtra("second");                    Log.d("FirstActivity2",data2);                }                break;            case 3:                if (resultCode == RESULT_OK){                    String data3 = data.getStringExtra("third");                    Log.d("FirstActivity",data3);                }                break;            default:        }    }

上面是自己寫的三種情況下的判斷,實際上若是只有兩個Activity,那麼只需要一個case就可以了。可以看出來,要想回傳資料成功,需要case中匹配,然後是resultCode也需要匹配成功。

可以這樣理解:一封信的寄送與接收,需要信封上的地址與本人的地址(requestCode)一致,而且有時地址一致,但強調姓名(resultCode)也要一致,那麼信封才會送到收件者手中。

在SecondActivity被finish()方法銷毀後,就會調用onActivityResult方法,先是選擇requestCode(即FirstActivity中startActivityForResult中的唯一值),若存在,則根據setResult中的返回狀態值與onActivityResult中的比較,若相同,則直接加以顯示。

在返回資料到上一個活動中,還沒想好怎麼來通俗的比喻,下次再補上。

 

Android學習之Intent傳遞資料

聯繫我們

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