我有三个Android activity
A,B,C。
我从B
活动中调用A
个活动:
public void onCreate(){
Intent intent = new Intent(A.this, B.class);
startActivity(intent);
finish();
}
在B
活动的onSuccess中我正在使用Sharedpreference
:
protected void onSuccess(Bundle savedInstanceState) {
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
/...../
editor.apply()
}
现在,我想访问sharedPreferences
活动类中A
的参数。在哪种方法的活动A
我会得到这些参数? onSuccess
?在访问这些参数之前,活动B
也将返回活动A
。我怎样才能做到这一点?我是Android
开发中的新手。
#Edit
public void onCreate(){
Intent intent = new Intent(A.this, B.class);
startActivity(intent);
finish();
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
String name = sharedpreferences.getString(Name, "");
}
答案 0 :(得分:6)
SharedPreferences有App-Scope。因此,即使您将它们保存到活动中,也可以在应用的其他所有活动中调用它们。
在每个活动中,您可以将其称为保存一些首选项:
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
editor.putString("Key", "Value");
editor.putInt("Key2", Value(int));
editor.apply();
并且,总是从所有活动中,您可以通过调用:
来检索它们SharedPreferences prefs = getPreferences(MODE_PRIVATE);
String restoredText = prefs.getString("Key", null);
if (restoredText != null)
{
int Key2= prefs.getInt("Key2", -1);
/*if (selectionStart != -1)
{
//do Something
}*/
}
here你可以找到一个很好的指南,它解释了你需要知道的几乎所有内容:)
编辑: 好的,这个图像可以帮助你理解android的生命周期:
由于您想从活动B返回活动A,您可以避免调用finish()
方法;您可以执行以下操作:
活动A:
Intent i = new Intent(A.this, B.class);
startActivity(i);
现在,A活动将是B活动以下应用程序的Backstack中的第一个。
活动B:
//Do your stuffs
finish();
现在活动B将关闭,A再次显示。
如果你想要完成A活动,在B活动中,而不是finish();
,你再次使用一个意图:
Intent i = new Intent(B.this, A.class);
startActivity(i);
finish();
如果必须将数据传回活动A,则在A活动中使用startActivityForResult();
调用B。 here是关于它的文档。
但是如果在B活动中你只需要获得sharedPref并在A活动中使用它们,我建议你直接从A活动中恢复它们,因为它们有App范围。
EDIT2:
您可以访问onCreate()中的SharedPrefs,但前提是在保存sp后调用onCreate方法。
我建议你使用最后一种方法:用
调用B活动Intent i = new Intent(A.this, B.class);
startActivity(i);
finish();
而不是用
调用A.Intent i = new Intent(B.this, A.class);
startActivity(i);
finish();
你将在onCreate中拥有sharedPrefs。
对于任何问题,我还在这里:)
PS:请记住,如果存在sharedPrefs,请使用if (sharedPref.contains("Key")){//dosomething}
PPS:sharedPrefs通常仅用于设置,如果您需要保存更多值,请尝试查看sugarORM,这是一个非常简单的应用数据库