【问题标题】:clicking 'back' on PreferenceScreen closes current activity单击 PreferenceScreen 上的“返回”关闭当前活动
【发布时间】:2015-02-28 23:12:30
【问题描述】:

我有一个打开 PreferenceScreen 的活动。当我单击“返回”时 - 我希望首选项屏幕将关闭,我将返回活动,但相反 - 当前活动已关闭,我将返回上一个活动。我该如何解决?

public class MyActivity extends Activity {
    //....
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        return (new Helper()).onOptionsItemSelected_menu(item,this,mFragmentManager);
    }
}


public class Helper {
   // ....

    public boolean onOptionsItemSelected_menu(MenuItem item, Activity activity, FragmentManager mFragmentManager)
    {
        switch (item.getItemId()) {
           case R.id.action_settings:
               MenuHelper.settings(activity, mFragmentManager);
               return true;
           default:
               return onOptionsItemSelected_menu(item, activity, mFragmentManager);
            }
     }

     public static void settings(Activity activity, FragmentManager mFragmentManager) {        
        FragmentTransaction mFragmentTransaction = mFragmentManager
                                .beginTransaction();
        PrefsFragment mPrefsFragment = new PrefsFragment(activity);
        mFragmentTransaction.replace(android.R.id.content, mPrefsFragment);
        mFragmentTransaction.commit();
     }

     public static class PrefsFragment extends PreferenceFragment {
        Activity m_activity;
        public PrefsFragment(Activity activity)
        {
            m_activity = activity;
        }

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
     }
}

【问题讨论】:

    标签: android android-preferences preferencescreen


    【解决方案1】:

    Daniel 的回答是完全正确的,尽管您可以通过在事务提交之前添加 mFragmentTransaction.addToBackStack(null) 来实现相同的目的。

    【讨论】:

      【解决方案2】:

      您的问题似乎是您正在用您的首选项屏幕替换当前活动中的片段。

      您将不得不稍微重构您的代码,但关键是为您的首选项屏幕打开一个新的 Activity,而不是替换当前 Activity 中的片段。这将为 Preferences 屏幕添加一个新的 Activity 到 Back Stack,当您单击返回时,它将从 Back Stack 中弹出 Preferences Activity 并根据需要返回到上一个 Activity。

      编辑:不要重构你的代码,按照@GnoX 的建议去做。

      有关更多信息,请参阅本指南:http://developer.android.com/guide/components/tasks-and-back-stack.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-04
        • 1970-01-01
        相关资源
        最近更新 更多