在PreferenceScreen上单击“返回”将关闭当前活动

时间:2015-02-28 23:12:30

标签: android android-preferences preferencescreen

我有一个打开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);
     }
}

2 个答案:

答案 0 :(得分:1)

Daniel的答案是完全正确的,尽管你可以通过在事务提交之前添加mFragmentTransaction来实现同样的事情。 addToBackStack(null)

答案 1 :(得分:0)

您的问题似乎是您正在使用“偏好设置”屏幕替换当前活动中的片段。

您必须稍微重新考虑一下代码,但关键是要为“首选项”屏幕打开一个新的“活动”,而不是替换当前“活动”中的片段。这将在“首选项”屏幕的后台堆栈中添加一个新的活动,当您单击“返回”时,它将从“后退堆栈”中弹出“首选项活动”,并根据需要返回上一个“活动”。

编辑:不要重新考虑您的代码,只需执行@GnoX建议的内容。

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