如何将数据直接从链接的儿童的儿童活动传递给MainActivity

问题描述:

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://*.com/a/42171973/6676466) –

编辑

尝试 创建和扩展底座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

你的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. 
} 

有含多处评估方式实现在这里清单文件这个

一个使用活动android:launchMode=""您必须通过意向采取数据不使用startActivityForResult这从一个活动则仅当回按其他

两个用SharedPreferences保存它的每个活动

三无使用意图数据

尝试这种解决方案结合了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") 
     } 
    } 

}