我有3項活動。意向從活動1傳遞給活動2,其中一些數據將用於數據庫事務。從活動2數據和意圖傳遞到活動3.沒有意向的清爽活動
現在,我想從活動3轉移到活動2,但活動2從活動1獲取意圖,它返回一些錯誤,導致空例外:/
所以,我想刷新自Activity 3回活動2,但沒有意圖或正確使用意向的,不影響數據
我有3項活動。意向從活動1傳遞給活動2,其中一些數據將用於數據庫事務。從活動2數據和意圖傳遞到活動3.沒有意向的清爽活動
現在,我想從活動3轉移到活動2,但活動2從活動1獲取意圖,它返回一些錯誤,導致空例外:/
所以,我想刷新自Activity 3回活動2,但沒有意圖或正確使用意向的,不影響數據
啓動活性2從Acivity1爲:
在活性2使用Intent i = new Intent(this, Activity2.class);
startActivityForResult(i, 1);
setResult
將數據發送回:
Intent intent = new Intent();
intent.putExtra("edittextvalue","value_here")
setResult(RESULT_OK, intent);
finish();
,並在第一個活動接收數據onActivityResult:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if(resultCode == RESULT_OK){
String stredittext=data.getStringExtra("edittextvalue");
}
}
}
OR
您可以使用此 在活性2,
@Override
public void onBackPressed() {
String data = mEditText.getText();
Intent intent = new Intent();
intent.putExtra("MyData", data);
setResult(resultcode, intent);
}
在活性1,
onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == RESULT_OK) {
String myStr=data.getStringExtra("MyData");
mTextView.setText(myStr);
}
}
}
OR
您可以使用SharedPreferences也爲共享數據之間的活動
可以使用接口來實現這一目標。例如:在你的Activity3,創建一個接口:
interface Communicator {
void receiveData(Object toSend);
}
然後你實現你的活性2如下:
public class Activity2 extends Activity implements Activity3.Communicator, Serializable {
//You'll have to implement the method
public void receiveData(Object toSend) {
//do what you have to do with your object once it's been sent back.
}
}
爲了使用這種模式,你必須使用一個意圖開始Activity3
像你一樣。我用Serializable
因爲你想通過Intent
傳遞活動的一個實例:
Intent intent = new Intent(this, Activity3.class);
intent.putExtra("activity2", this);
startActivity(intent);
您檢索Activity3的活性2物體在其onCreate
方法:
public class Activity3 extends Activity {
private Communicator mActivity2; //your activity
private Object mData; //Whatever object you want to send
public void onCreate(Bundle bundle) {
//...
Intent intent = getIntent();
Serializable object = intent.getSerializableExtra("activity2");
if (object != null && object instanceof Communicator) {
//make sure the object is not null and implements the Communicator
mActivity2 = (Communicator) object;
}
}
}
一旦你在你的Activity3
完成(一旦它關閉),您實施如下方法,如onBackPressed
或onDestroy
,如下所示:
@Override
public void onDestroy() { //better if the back button is not pressed
super.onDestroy();
if (mActivity2 != null) { //check if is not null
mActivity2.receiveData(mData);
}
}
而且您的活動應該更新而不使用意圖。
順便說一下,使用這種模式的片段比活動好得多。你應該使用片段。
你可以添加一些代碼嗎? – Stefan
使用'startActivityForResult'和'onActivityResult'從3回傳到2。 – dharms
怎麼樣?你可以給我一個例子嗎 ? –