Navigating from Activity A->B->C - How to pass data from C to A in onBackPressed()?
从Activity A呼叫Activity B。
从B到C,同时呼叫Activity C。
我调用Activity B的finish(从堆栈历史中清除Activity B)
在Activity BonBackPressed()中,我通过setResult()从Activity B到Activity A传递数据,但在Activity A中,数据是null和resultCode 0。
如何从Activity A中的Activity B获取数据?
- 嗯,我找不到一个像样的重复问题,ATM,但这篇文章演示了如何做到这一点。
打开C时,不要从B调用finish(),而是用startActivityforResult()调用C,当B中的onActivityResult()被触发时,再将数据传回B。类似:
1 2 3 4 5 6 7 8 9 10
| ActivityB {
onCreate(Bundle) {
startActivityForResult(ActivityC, 0);
}
onActivityResult(int, int, Intent){
setResult(resultCode, data);
finish();
}
} |
编辑:
显然,在调用b时添加标志Intent.FLAG_ACTIVITY_FORWARD_RESULT,实际上也应该达到您想要的结果。
每天学习一些新的东西…
- 您还可以使用getIntent().putExtra(标识符,dataasstring)发送多个标志。然后可以在onActivityResult中使用intent.getExtras().getString(标识符)访问它。
- 这些标志应该通过intent.setflags(int),putextra()应用,只需将数据添加到与intent一起传递的包中,所以您需要同时使用这两个标志来实现所需的效果。
- @guardanis谢谢,我试过用a->startActivityForResult(b)从b调用c,用startActivity()用intent.flag"活动"forward"结果",在onbackpressed()中调用c活动,调用finish和setResult(),但在活动a中,我收到空数据。
- B也必须用StartActivityForResult调用C,否则它将永远不会返回到B。只有A应该有意图。标记活动转发结果
- @Guardanis我很确定你不需要用startActivityForResult()启动Activityc。我认为问题可能是OP在setResult()之前调用finish()和/或super方法。
- @Mike如果他使用B的OnActivityResult()将数据传输回A,那么B是否需要用StartActivityForResult()启动C才能调用B的OnActivityResult()?如果b要在a和c之间完成(),那么intent.flag"活动"forward"结果"是否也是同样的情况?
使用共享首选项
C活性
SharedPreferences sf = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = sf.edit();
editor.putString(key, value);
editor.commit();
一项活动
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
String savedPref = sharedPreferences.getString(key,"");
mOutputView.setText(savedPref);
有多种方法可以做到这一点:
选择你最喜欢的那个。