Удалите текущий экран настроек и вернитесь на главный экран настроек

У меня есть PreferenceActivity, где я добавляю некоторые экраны предпочтений программным способом. Поэтому у меня есть список с моими экранами предпочтений.

Пример:

  • Toto
  • Тити
  • Tata​​li >

Итак, я повторяю и вызываю функцию (Board - это настраиваемый объект):

private PreferenceScreen CreatePreferenceScreen(Board b) {
    PreferenceScreen p = getPreferenceManager().createPreferenceScreen(this);
    p.setPersistent(true);
    p.setKey("preferenceScreen_" + b.getId());

    PreferenceCategory general = new PreferenceCategory(this);
    general.setTitle("General");
    p.addPreference(general);

    Preference delete = new Preference(this);
    delete.setTitle("delete");
    final PreferenceScreen pFinal = p;
    delete.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
        @Override
        public boolean onPreferenceClick(Preference arg0) {
            String delId = board.getId();
            PreferenceCategory themes = (PreferenceCategory) findPreference("themes");
            PreferenceScreen screen =(PreferenceScreen)findPreference("preferenceScreen_" + delId); 
            themes.removePreference(screen);
            /*GO BACK TO PREFERENCEACTIVITY HERE OR KILL THIS SCREEN*/
            return true;
        }
    });
    general.addPreference(delete);
    return p;
}

Если я нажму на то, он откроет экран предпочтений toto, и на этом экране у меня есть опция "Удалить" . Если я нажму "Удалить" , он удалит этот экран предпочтений из PreferenceActivity (предыдущий экран), но я все еще на экране предпочтений.

Я хотел бы вернуться к предыдущему экрану, когда я использую "Удалить" .

Я не могу использовать finish() на моем экране предпочтений, потому что он выходит из приложения. Если я нажму кнопку "Назад", я вернусь к PreferenceActivity (предыдущий экран), и экран настроек toto был удален (yata, эта функция сработала!)

Ответ 1

Пользователь нашел решение благодаря документам разработчика PreferenceScreen.

Когда он появляется внутри другой иерархии предпочтений, он отображается и служит в качестве шлюза для другого экрана предпочтений (либо посредством показывая другой экран предпочтений в виде диалога или через startActivity (android.content.Intent) из getIntent()). дети этого экрана предпочтений НЕ отображаются на экране, что этот экран предпочтения показан в. Вместо этого отдельный экран будет отображается при нажатии этой настройки.

Итак, замените это:

/*GO BACK TO PREFERENCEACTIVITY HERE OR KILL THIS SCREEN*/

с этим:

pFinal.getDialog().dismiss();

И он выполняет желаемое задание: закройте текущий preferenceScreen.