我有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来测试我的应用程序,因为我的笔记本电脑不支持虚拟模拟器
答案 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", "");
希望这会对你有所帮助。