【问题标题】:How to handle the status of the returning back from a child activity如何处理从子活动返回的状态
【发布时间】:2014-05-18 05:23:25
【问题描述】:

我希望在将用户引导至首选项窗口“设置”后,有一个指示器暗示用户是否从首选项活动返回,无论他是否勾选了指定选项。

我知道我可以使用startActivity()startActivityForResult() 从我当前的活动“Parent”开始偏好活动“child activity”。但在这种情况下,我想检查从child activity返回的状态

更新

或者更具体地说,我想检查“定位服务”菜单中的“gps enable”选项是否被勾选。

【问题讨论】:

  • 在您的 onActivityResult 中,确保应用程序从首选项返回后。活动,检查 PreferenceActivity 使用的 SharedPreference 以查看用户是否通过勾选复选框更新了值。
  • 您能否提供一些检查系统共享首选项的示例?
  • 请参阅下面答案中的解释和示例,了解如何使用复选框首选项。

标签: android android-activity onactivityresult


【解决方案1】:

假设您的PreferenceActivity 中有一个CheckboxPreference,声明为:

<CheckBoxPreference
    android:defaultValue="false"
    android:key="prefAutoLogin"
    android:summary="@string/pref_autologin_summary"
    android:title="@string/pref_autologin" />

在您的主要活动的onOptionsItemSelected 中,您检查按下了哪个菜单项,如果是设置菜单,则启动您的PreferenceActivity

final Intent i = new Intent(this, MySettingActivity.class);
startActivityForResult(i, RESULT_SETTINGS); 
// RESULT_SETTINGS is an integer constant to identify the preference activity

您为结果启动MySettingsActivity,这意味着当前活动将在onActivityResult 方法中返回时得到通知。您覆盖该方法以检查修改:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) 
    {
    case RESULT_SETTINGS:
        // here you check whether the auto-login preference was checked or not:
        final SharedPreferences prefs = PreferenceManager
            .getDefaultSharedPreferences(this);
        final boolean autoLoginChecked = prefs.getBoolean("prefAutoLogin", false);
        // prefAutoLogin is the key of your CheckBoxPreference declared in the xml above.
        if (autoLoginChecked)
        {
            // perform the actions necessary when the checkbox is ticked
        }
        else 
        {
            // ...
        }
        break;
    }
    [...]
    default {...} 
}

如果您仅在复选框从 false 勾选为 true 时才需要执行某些操作(而不是每次从 pref.activity 以选中状态返回时),您应该在启动首选项活动之前存储其状态,并在返回时匹配新状态:

private boolean initiallyChecked; 

在您开始设置活动之前:

final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
initiallyChecked = prefs.getBoolean("prefAutoLogin", false);

那么当activity返回时,你不只是检查checkbox的值是否为真,而是检查之前是否为假:

if (autoLoginChecked && !initiallyChecked)
{ .... }

更多参考请参见this post on viralpatel

【讨论】:

  • 随着您的更新,这个问题有了另一个意义,请参阅此主题以了解如何实现您的目标:stackoverflow.com/a/7990939/506879
  • @Elpharaoh 以后请避免此类更新完全改变您的问题。并确保您先搜索它,因为您的两个问题之前都已被回答过多次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多