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

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 BActivity A传递数据,但在Activity A中,数据是nullresultCode 0
  • 如何从Activity A中的Activity B获取数据?


    打开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,实际上也应该达到您想要的结果。

    每天学习一些新的东西…


    使用共享首选项

    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);


    有多种方法可以做到这一点:

    • 存储Activity CApplication对象的数据,在Activity A中读取:

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

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

    选择你最喜欢的那个。