我有活动A,我可以导航到A->B->C->D
在Activity D
我有一个按钮,如果用户按此按钮,它将转到Activity A
。在这里,我将创建一个新实例,用户可以在此处更新值。
我完成了活动,它将转到Activity D
,来自Activity D
用户将按Back Button
并转到
D->C->B->AActivity A
。
我需要在Activity A
中显示更新后的值,如何更新“活动A”中的值?
答案 0 :(得分:4)
你想要拥有一大堆startActivityForResult()
,并且基本上将它们从D链接回A。
见这里:How can I pass values between Activities on Android?
或者,您可以将值存储为SharedPreferences
,稍后在返回原始活动时查看。
答案 1 :(得分:4)
我认为您必须使用 SharedPreference 来保持点击后退按钮上的数据或使用静态变量。
// ------------------存储数据------------------
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("key", countValue);
editor.commit();
// ---------------------获取数据------------------
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
Intent home=new Intent(PersentActivity.this,DesiredActivity.class);
sharedPreferences = getSharedPreferences("MY_SHARED_PREF", MODE_PRIVATE);
int countValue = sharedPreferences.getInt("key", 0);
startActivity(home);
return true;
}
答案 2 :(得分:2)
使用Shared Preferences
保存您的数据。因此,您将获得所有活动中的数据。
答案 3 :(得分:1)
如果您在更新Activity A
时未存储数据,我认为最好将它们存储在Activity A
本身的静态变量中,并将数据加载到onResume()
中。
如果您有数据库,则将数据存储到Activity A
数据库中的onResume()
。
答案 4 :(得分:0)
在您的D活动中包含此代码段。
@Override
public void onBackPressed(){
aMethodToUpdateYourActivityA();
}
答案 5 :(得分:0)
您可以在此处了解有关活动生命周期和管理数据的更多信息Activity
至于您的问题,您应该对活动A中的onResume方法的数据进行任何更新。
@Override
public void onResume(){
//Update your data here
}
如果你担心如何在它们之间传递数据,你可能应该使用Shared preferences,因为在这么多的活动中没有真正建议加载startActivityForResult。 是否真的有必要拥有这种层次结构?如果用户更新数据,您只需启动ActivityA并直接将数据传递给它。这将更容易。
答案 6 :(得分:0)
这可以通过两种方式完成:
使用共享首选项并存储更新后的值,然后存储活动A的onResume(),从相同的共享首选项中读取它并更新值。
使用startActivityForResult启动活动,并使用intent对象收集值,并使用setResult将其传递回以前的活动。