一、向下一個活動傳遞數據java
Intent中提供了一系列的putExtra()方法的重載,能夠把咱們想要傳的數據暫存在Intent中,啓動一個活動後,只需把這些數據在從Intent中,取出來便可。作一個簡單的Demo演示一下:android
新建項目MyDataTrans,同時在項目中新建類Second.java和佈局second.xml。ide
在activity_main.xml中修改佈局(TextView用於獲取從上一活動或許的值):佈局
<LinearLayout android:id="@+id/lin1" android:layout_width="fill_parent" android:layout_height="wrap_content"> <Button android:id="@+id/btn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Click On"/> </LinearLayout> <LinearLayout android:id="@+id/line2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/lin1" > <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
在second.xml中修改佈局(TextView用於獲取從上一活動或許的值):this
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView2" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:id="@+id/btn2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Back"/> </LinearLayout>
在MainActivity.java中添加按鈕1的單擊事件,跳轉到活動2中,spa
btn1=(Button)findViewById(R.id.btn); btn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent1=new Intent(MainActivity.this,Second.class); intent1.putExtra("mydata", "你好,我來自界面1。。。。"); startActivity(intent1); } });
這裏咱們用顯示Intent的方式啓動Second,並經過putExtra()方法傳遞一個字符串。其中putExtra()接受兩個參數,第一個參數是鍵,用於後面從Intent中取值,第二個參數就是要傳遞的值。
接着進入到Second.java中,在這裏咱們的目的就是要把上一個頁面傳的值進行取出顯示,onCreat()方法中添加以下代碼:code
protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.second); btn2=(Button)findViewById(R.id.btn2); textView2=(TextView)findViewById(R.id.textView2); //獲取上一個活動傳出的值 Intent intent=getIntent(); textView2.setText(intent.getStringExtra("mydata")); }
經過getIntent()方法獲取用於啓動的Second的Intent,而後調用getStringExtra()方法,獲取相應的鍵值,就能夠獲得傳遞的數據了。而後把傳遞的數據在TextView上顯示出來。xml
二、返回數據給上一個活動blog
方法其實和上面的相似,在MainActivity.java中 依舊是點擊Button控件跳轉到Second頁面,事件
Intent intent1=new Intent(MainActivity.this,Second.class); startActivityForResult(intent1, 1);
這裏咱們用startActivityForResult()方法來啓動Second,startActivityForResult()方法接受兩個參數,第一個參數是Intent,第二個參數是請求碼,用於在回調中判斷數據的來源。其中,請求碼只要是惟一值就能夠了。
在Second中給按鈕註冊點擊事件,並添加返回數據的邏輯:
btn2=(Button)findViewById(R.id.btn2); btn2.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Intent intentback=new Intent(); intentback.putExtra("data_back", "界面1,你好!!!"); setResult(RESULT_OK, intentback); finish(); } });
這裏構建Intent僅僅用於傳遞數據而已,沒有任何指定的意圖。緊接着要傳遞的數據放在intentback中,而後調用setResult()方法,用於向上一個活動返回數據。setResult()方法接受兩個參數,第一個參數用於向上一個活動返回處理結果,通常只有RESULT_OK或者RESULT_CANCELED這兩個值,第二個參數則是把帶有數據的intentback傳遞回去,而後調用finish()方法來銷燬當前活動(必須銷燬,不然沒法回調)。
因爲使用startActivityForResult()方法啓動的Second,因此在被銷燬以後會回調到上一個活動的onActivityResult()方法,所以須要在MainActivity.java中從新寫這個方法來獲得返回的數據,以下所示:
protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); textView1=(TextView)findViewById(R.id.textView1); super.onActivityResult(requestCode, resultCode, data); switch(requestCode){ case 1: if(resultCode==RESULT_OK){ textView1.setText(data.getStringExtra("data_back")+"我來自界面2!!!"); } break; default: } }
onActivityResult()有三個參數,第一個參數requestCode,即咱們在啓動活動時傳入的請求碼,第二個參數resultCode,即咱們在返回出具時傳入的處理結果,第三個參數data即咱們帶有返回數據的Intent(這裏指intentback)。
因爲一個活動中有可能調用startActivityForResult()方法去啓動不少不一樣的活動,可是每個活動返回的數據都會調到onActivityResult()中,因此首先要作的就是根據requestCode,即請求碼來檢查判斷數據源。而後再根據resultCode的值來判斷處理結果是否成功。最後有打他來傳入返回的數據。
答疑:當用戶不是經過按鈕的單擊事件返回,而經過back鍵返回時是否是就無法獲取想要返回的數據了呢?
這時候只需咱們調用一個叫作onBackPressed()的方法來解決這個問題。代碼以下:
public void onBackPressed() { Intent intentback=new Intent(); intentback.putExtra("data_back", "界面1,你好!!!"); setResult(RESULT_OK, intentback); finish(); }
其實,咱們能夠 單獨寫一個返回數據的方法,而後在按鈕註冊點擊事件或者onBackPressed()時直接調用就好。