щелчок «назад» на 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);
     }
}

person TamarG    schedule 28.02.2015    source источник


Ответы (2)


Ответ Даниэля абсолютно правильный, хотя вы можете добиться того же, просто добавив mFragmentTransaction.addToBackStack(null) прямо перед фиксацией транзакции.

person GnoX    schedule 01.03.2015

Похоже, ваша проблема заключается в том, что вы заменяете фрагмент в текущем действии экраном настроек.

Вам придется немного изменить свой код, но ключ в том, чтобы открыть новое действие для экрана настроек вместо замены фрагмента в текущем действии. Это добавит новое действие в Back Stack для экрана Preferences, и когда вы щелкнете назад, оно вытащит действие Preferences из Back Stack и вернет вас к предыдущему Activity по вашему желанию.

Редактировать: не реорганизовывайте свой код, просто делайте то, что предлагает @GnoX.

Дополнительные сведения см. в этом руководстве: http://developer.android.com/guide/components/tasks-and-back-stack.html

person Daniel Nugent    schedule 28.02.2015