在3个活动之间保存额外的意图

时间:2016-08-03 07:28:20

标签: android android-intent

我有3项活动。 A,B,C 我通过getExtra设置一个字符串来自活动B中来自活动A的意图。 我需要从活动C中获得另一项额外费用,然后返回活动B.

但是在我回到活动B之后,我从活动A中丢失了Extra。 我尝试使用savedPreferenced,将启动更改为singleTop。 但后来我的应用程序崩溃了。 如何从意图中节省额外的费用?

我找不到完整的教程来做这件事。

我是新手,需要一些细节解释。感谢。

这是我用来从活动A向B发送额外代码的代码:

    void sendTxt() {
    String shareBody = getPlainDocumentText();
    if (shareBody == null) {
        Toast.makeText(A.this, R.string.empty_document, Toast.LENGTH_LONG).show();
        return;
    }
    Intent i = new Intent(A.this, B.class);
    String txt = shareBody;
    i.putExtra("file", txt);
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(i);
    finish();
    Screen.unlockOrientation(A.this);
}

这是我用来从A:

获取B中的Extra的代码
 public String teks;
 if (savedInstanceState == null){
        Bundle extras = getIntent().getExtras();
        if(extras==null){
            teks = null;
        }else{
            teks = extras.getString("file");
        }
    }else{
        teks = (String) savedInstanceState.getSerializable("file");
    }
    t = (TextView)findViewById(R.id.txt);
    t.setText(teks);

然后我从活动B转到C:

Intent i = new Intent(B.this, C.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
finish();

在活动C中,我回到B并向B发送额外信息:

Intent i = new Intent(C.this, B.class);
String path = dir.getAbsolutePath().toString();
i.putExtra("dir", path);
setResult(RESULT_OK, i);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
finish();

在B中,我从C获得额外奖励,但是从A中失去了额外费用。

我无法显示日志,因为我没有使用模拟器。我只是通过创建apk来测试我的应用程序,因为我的笔记本电脑不支持虚拟模拟器

1 个答案:

答案 0 :(得分:0)

从C中调用B活动后,您从A中丢失了额外的值,因为您完成(销毁)B活动,因此值丢失并通过从C活动调用重新创建B活动。

对于此问题,您可以将您的值保存在Shared Pref中,例如。

将其保存在活动A的首选项中

SharedPreferences.Editor editor = getSharedPreferences("your_pref_name", MODE_PRIVATE).edit();
editor.putString("key_name", extra_value);
editor.commit();

在活动B中获取

SharedPreferences prefs = getSharedPreferences("your_pref_name", MODE_PRIVATE); 
String name = prefs.getString("key_name", "");

希望这会对你有所帮助。