11

我启动了一个 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;
}

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

当我使用“删除”时,我想返回上一个屏幕。

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

4

1 回答 1

2

由于PreferenceScreen 开发人员文档,用户找到了解决方案。

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

所以替换这个:

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

有了这个:

pFinal.getDialog().dismiss();

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

于 2014-07-02T13:35:04.513 回答