2017-02-11 81 views
0

MainActivity包含按鈕。 點擊按鈕將進入活動2。 活動2有提交的按鈕需要第3次活動。 第三個活動已完成按鈕,它應該帶我到MainActivity並顯示從第2和第3個獲取的數據。活動3不應該回到活動2.如何將數據直接從鏈接的兒童的兒童活動傳遞給MainActivity

我的方法: -

從Mainactivity盯着活性2

Intent activity2Intent= new Intent(MainActivity.this, activity2.class); 
startActivityForResult(activity2Intent, INTENT_COUNTRY_REQUEST); 

從活動二我又開始Activity3和傳遞數據以及

`Intent Activity3Intent = new Intent(this, Activity3.class); 
Activity3.putExtra("Position", mPosition); 
Activity3.putExtra("CName", mCName); 
Activity3Intent .setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); 
startActivity(Activity3Intent);` 

在活動3中,我將活動中的值用於相關數據,然後提交完成,將所有此數據包發送到MainActivity。

Intent goMainActivity = new Intent(this,MainActivity.class); 
    goMainActivity .putExtra("SName", mSName); 
    goMainActivity .putExtra("CNme", mCName); 
    setResult(RESULT_OK, goMainActivity); 
    boolean foundHome = navigateUpTo(goMainActivity); 
    finish(); 

主要活動有檢查數據的onActivityResult方法,但它永遠不會提取。

任何人都可以建議我如何將數據發送回MainActivity.navigateUpTo帶我到MainActivity但數據永遠不會傳遞。

在此先感謝。 任何幫助表示讚賞

+0

試試[我​​下面的解決方案]您的數據(http://stackoverflow.com/a/42171973/6676466) –

回答

0

編輯

嘗試 創建和擴展底座android.app.Application類和它定義了全局變量,那麼您可以在應用程序上下文獲取或設置值。

public class Globalvar extends Application { 

    private String mSName; 

    public String getSmSName() { 
     return mSName; 
    } 

    public void setmSName(String mSName) { 
     this.mSName = mSName; 
    } 
} 

在你的Android清單你必須申報實施android.app.Application

<application 
    android:name=".Globalvar" 
    android:icon="@drawable/icon" 
    android:label="@string/app_name"> 

然後獲取或設置

// set 
((MyApplication) this.getApplication()).setmSName("foo"); 

// get 
String s = ((MyApplication) this.getApplication()).getmSName(); 

以前的答案

類在MainActivity中, onCreate()方法,你需要檢索包(包含所有通過調用活動發送的數據)

Bundle bundle = getIntent().getExtras(); 
    String sname = bundle.getString("SName"); 
    String cname = bundle.getString("CNme"); 
+0

我已經試過這但對null對象引用的'java.lang.String android.os.Bundle.getString(java.lang.String)'。 – Vani

+0

嘗試檢索活動3中的活動2發送的值(如果檢索到),將這些值分配給某個變量,然後將其傳遞給MainActivity –

+0

在活動3的onCreate方法中,我獲取存儲它們的activity2的值,然後在onclick done中傳遞這些值活動3的方法。在活動3即時通訊這些值主要activity.But主要活動不取任何東西。 – Vani

0

你的onActivityResult永遠不會從第三活動叫,因爲你開始第二次活動與startActivityForResult和你正在嘗試繞過第二個活動。

請嘗試下面的代碼爲您的解決方案。

MainActivity.java

Intent activity2Intent= new Intent(MainActivity.this, activity2.class); 
startActivity(activity2Intent); 

活性2。java的

Intent Activity3Intent = new Intent(this, Activity3.class); 
Activity3.putExtra("Position", mPosition); 
Activity3.putExtra("CName", mCName); 
Activity3Intent .setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); 
startActivity(Activity3Intent); 

這裏是你的主要任務

activity3.java

Intent goMainActivity = new Intent(this,MainActivity.class); 
goMainActivity .putExtra("callingFrom", activity3); 
goMainActivity .putExtra("SName", mSName); 
goMainActivity .putExtra("CNme", mCName); 
startActivity(goMainActivity); 
ActivityCompat.finishAffinity(this); 

現在你必須只在檢查MainActivityonCreate()

String callingFrom = bundle.getString("callingFrom"); 
if(callingFrom.equalsIgnoreCase("activity3")) 
{ 
    // now get your othere parameters and do your work with them. 
} 
0

有含多處評估方式實現在這裏清單文件這個

一個使用活動android:launchMode=""您必須通過意向採取數據不使用startActivityForResult這從一個活動則僅當回按其他

兩個用SharedPreferences保存它的每個活動

三無使用意圖數據

0

嘗試這種解決方案結合了android:launchModeSharedPreferences

MainActivity.java

Intent activity2Intent= new Intent(MainActivity.this, activity2.class); 
startActivityForResult(activity2Intent, INTENT_COUNTRY_REQUEST); 

activity2.java打開Activity3光潔度活性2,並開始與Activity3 「startActivityForResult」

Intent Activity3Intent = new Intent(this, Activity3.class); 
Activity3.putExtra("Position", mPosition); 
Activity3.putExtra("CName", mCName); 
startActivityForResult(activity2Intent, INTENT_COUNTRY_REQUEST); 
finish(); 

activity3.java返回結果,此結果時將去MainActivity的OnActivityResult(),不要啓動一個新的MainActivity。

Intent resultIntent = new Intent(); 
resultIntent.putExtra("SName", mSName); 
resultIntent.putExtra("CNme", mCName); 
setResult(RESULT_OK, resultIntent); 
finish(); 

現在你會得到MainActivityonActivityResult()

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (resultCode == RESULT_OK) { 
     if (requestCode == INTENT_COUNTRY_REQUEST 
       && data != null) { 
      String SName = data.getExtras().getString("SName"); 
      String CNme= data.getExtras().getString("CNme") 
     } 
    } 

}