2016-05-09 60 views
0

我有3項活動。意向從活動1傳遞給活動2,其中一些數據將用於數據庫事務。從活動2數據和意圖傳遞到活動3.沒有意向的清爽活動

現在,我想從活動3轉移到活動2,但活動2從活動1獲取意圖,它返回一些錯誤,導致空例外:/

所以,我想刷新自Activity 3回活動2,但沒有意圖或正確使用意向的,不影響數據

+2

你可以添加一些代碼嗎? – Stefan

+0

使用'startActivityForResult'和'onActivityResult'從3回傳到2。 – dharms

+0

怎麼樣?你可以給我一個例子嗎 ? –

回答

1

啓動活性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也爲共享數據之間的活動

0

可以使用接口來實現這一目標。例如:在你的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完成(一旦它關閉),您實施如下方法,如onBackPressedonDestroy,如下所示:

@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); 
    } 
} 

而且您的活動應該更新而不使用意圖。

順便說一下,使用這種模式的片段比活動好得多。你應該使用片段。