删除当前首选项屏幕并返回主首选项屏幕

Mae*_*lig 11 android android-preferences

我启动了PreferenceActivity,我以编程方式添加了一些首选项屏幕.所以我有一个列表与我的偏好屏幕.

例:

  • 托托
  • 蒂蒂
  • 塔塔

所以我迭代并调用一个函数(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;
}
Run Code Online (Sandbox Code Playgroud)

如果我点击toto,它会打开toto的首选项屏幕,在这个屏幕上我有一个选项"删除".如果我点击删除它会从PreferenceActivity(上一个屏幕)中删除此首选项屏幕,但我仍然在首选屏幕上.

当我使用"删除"时,我想回到上一个屏幕.

我不能finish()在我的偏好屏幕上使用它,因为它退出了应用程序.如果我点击我的后退按钮,我会回到PreferenceActivity(上一个屏幕),我的toto首选项屏幕已被删除(yata,该功能有效!)

And*_*ter 2

用户通过PreferenceScreen 开发人员文档找到了解决方案。

当它出现在另一个首选项层次结构中时,它会被显示并充当另一个首选项屏幕的网关(通过将另一个首选项屏幕显示为对话框或通过 getIntent() 中的 startActivity(android.content.Intent) )。此 PreferenceScreen 的子项不会显示在显示此 PreferenceScreen 的屏幕中。相反,单击此首选项时将显示一个单独的屏幕。

所以替换这个:

/*GO BACK TO PREFERENCEACTIVITY HERE OR KILL THIS SCREEN*/
Run Code Online (Sandbox Code Playgroud)

有了这个:

pFinal.getDialog().dismiss();
Run Code Online (Sandbox Code Playgroud)

它完成了预期的工作:关闭当前的preferenceScreen.