如何在android中返回父活动?

时间:2015-08-28 08:18:26

标签: android android-intent android-activity sharedpreferences

我有三个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, ""); 
}

1 个答案:

答案 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的生命周期:

lifecycle

由于您想从活动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,这是一个非常简单的应用数据库