安卓Activity之間傳數據除了用putExtra之外還可以用startActivityForResult獲取一個Activity的返回值。為了簡單闡述這種方式我們來做個簡單的模型:
假設A去開啟B,則調用函數? void startActivityForResult([Intent]() intent,int requestCode),這時候會設置一個requestCode,要求>=0就行了
這時候A需要覆蓋onActivityResult方法獲取返回值,這個方法具體是這樣的:void onActivityResult(int requestCode,int resultCode,[Intent]() data),requestCode的數值就是剛剛設置的requestCode,resultCode的數值會在B里面設置。這個函數將在B結束后調用。
這時候B需要調用setResult函數設置返回值,這個函數具體是這樣的:void setResult(int resultCode,[Intent]() data),第一個參數設置resultCode,這里的resultCode就是onActivityResult的resultCode。
查了一些資料關于這幾個函數的調用時機,發現下面這句話總結的很好:
**B**退回**A**過程中,首先是**B**處于Pause 狀態,然后等待?**A?**執行****restart——〉 start ——〉resume,然后才是B 的stop——〉destroy,而**A**的 onActivityResult() 需要在**B**pause之后,**A**restart 之前 這中間調用,所以**B**中的setResult()函數應該放在**B**pause 之前調用。這點非常的重要啊。
下面是代碼:
第一個Activity:
~~~
package com.example.mytest;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv ;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
}
public void click(View v) {
Intent intent = new Intent(this, NextActivity.class);
startActivityForResult(intent, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
String str = data.getStringExtra("data");
tv.setText(str);
System.out.println("onActivityResult");
}
}
~~~
第二個Activity:
~~~
package com.example.mytest;
import java.util.Random;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class NextActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.next_activity);
Intent intent = new Intent(this ,MainActivity.class);
intent.putExtra("data", "傳輸");
this.setResult(2, intent);
}
}
~~~
- 前言
- 安卓ListView一個簡單代碼的注釋和探討
- 安卓wifi熱點編程代碼的若干注釋
- 安卓距離傳感器編程
- 簡單的ScrollView
- 簡單的ListView
- 簡單的ArrayAdapter
- AsyncTask的初步學習
- AsyncTask再度學習
- Handler初步學習
- 開啟系統Activity
- 隱式調用Activity
- Activity的生命周期
- startActivityForResult的初步學習
- 多點觸控拉伸圖片
- LruCache圖片緩存技術
- SQLiteOpenHelper數據庫操作
- 短信攔截器
- 簡單的Notification
- ListView優化以及checkbox狀態問題
- 安卓多線程下載
- 安卓JSON解析初步探討
- 選項卡樣式的fragment
- DrawerLayout實現簡單的側滑功能
- 安卓軟引用解決圖片OOM問題
- 安卓隱式Intent啟動Activity和BroadcastReceiver若干注意點
- Dialog學習筆記
- ActionBar使用