【问题标题】:How to return to parent activity in android?如何在android中返回父活动?
【发布时间】:2015-11-22 20:13:16
【问题描述】:

我有三个 Android activity A、B、C。

我正在从A 活动中调用B 活动:

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()
}

现在我想在A活动类中访问sharedPreferences的参数。在ActivityA的哪个方法中我会得到这些参数? 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, ""); 
}

【问题讨论】:

  • 你的 C 活动巨魔在哪里?

标签: android android-intent android-activity sharedpreferences


【解决方案1】:

SharedPreferences 具有应用范围。因此,即使您将它们保存到 Activity 中,您也可以在应用的所有其他 Activity 中调用它们。

在每个活动中,您可以调用它来保存一些首选项:

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 活动下方的第一个。

活动 B:

//Do your stuffs
finish();

现在 Activity B 将关闭,A 再次显示。

如果你仍然想完成 A 活动,在 B 活动中,而不是 finish(); 你再次使用 Intent:

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 活动 with

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:记得检查 always 是否存在 sharedPrefs,使用

if (sharedPref.contains("Key"))
{
     // dosomething
}

PPS:sharedPrefs 通常仅用于设置,如果您需要保存更多值,请尝试查看 sugarORM,这是一个非常简单的应用程序数据库

【讨论】:

  • 感谢您的回答。从A 调用活动B 后,我想在活动B 一侧完成所有操作后,将光标返回到活动A。并从B 将其返回到活动A 后,我想使用此共享偏好数据。
  • @SnowClue 所以,只是想知道我是否理解:您想在活动 B 中获取 sharedPref 并在活动 A 中使用它们?
  • 是的,我想在B 活动中设置值并将其用于A 活动。我尝试使用上面的代码(请参阅编辑部分)。放置调试点后,我发现光标首先到达A.onCreate().Finish(),而不是B.onSuccess()
  • @SnowClue 我编辑了,我希望这就是你要找的 :)
  • 同意 sharedPref 具有 AppScope 但在 A 活动的哪个方法中我将从 B 活动中获取设置值?我确定我无法进入A.onCreate() 方法。我在找什么:启动A活动->从A调用B活动->在B活动的共享首选项中设置值->返回A活动->从SetPref获取值->从A调用C活动
猜你喜欢
  • 2019-08-07
  • 1970-01-01
  • 1970-01-01
  • 2014-05-27
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
相关资源
最近更新 更多