如何将数据直接从链接的儿童的儿童活动传递给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但数据永远不会传递。
在此先感谢。 任何帮助表示赞赏
编辑
尝试 创建和扩展底座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");
你的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);
现在你必须只在检查MainActivity
的onCreate()
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:launchMode
和SharedPreferences
。
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();
现在你会得到MainActivity
的onActivityResult()
@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")
}
}
}
试试[我下面的解决方案]您的数据(http://stackoverflow.com/a/42171973/6676466) –