从活动A-> B-> C导航 - 如何在onBackPressed()中将数据从C传递到A?

时间:2016-07-11 15:41:03

标签: android android-activity

  1. 来自Activity A来电Activity B
  2. 从B到C,同时致电Activity C
  3. 我为Activity B调用了完成,(从堆栈历史Activity B中清除)
  4. 并在Activity B onBackPressed()中,我通过setResult()将数据从Activity B传递到Activity A,但在Activity A中数据为{{ 1}}和null
  5. 如何从resultCode 0中的Activity B获取数据?

3 个答案:

答案 0 :(得分:1)

打开C时不要从B调用finish()。而是使用startActivityforResult()调用C,然后在触发B中onActivityResult()时将数据传回B.类似的东西:

ActivityB {
    onCreate(Bundle) {
        startActivityForResult(ActivityC, 0);
    }

    onActivityResult(int, int, Intent){
        setResult(resultCode, data);
        finish();
    }
}

编辑:

在呼叫B时显然添加标志Intent.FLAG_ACTIVITY_FORWARD_RESULT实际上也应该达到预期效果。

每天都学习新事物......

答案 1 :(得分:0)

其他方式有多种方法:

  • 将数据从Activity C存储到Application的对象,然后在Activity A中阅读:

       ((MySuperApplication) getApplication()).setMyData(..);
    
  • 将其作为活动结果传递

  • 将数据存储到SharedPreference中的Activity C并在Activity A中阅读。如果它是一个复杂的数据结构 - 我建议使用gson序列化对象并将其存储为string,然后在Activity A
  • 中对其进行反序列化

选择您最喜欢的那个。

答案 2 :(得分:0)

使用共享偏好

C ACTIVITY

SharedPreferences sf = getPreferences(MODE_PRIVATE); SharedPreferences.Editor editor = sf.edit(); editor.putString(key, value); editor.commit();

A ACTIVITY

SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); String savedPref = sharedPreferences.getString(key, ""); mOutputView.setText(savedPref);