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

时间:2012-10-04 17:43:21

标签: 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;
}

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

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

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

1 个答案:

答案 0 :(得分:2)

由于PreferenceScreen developer documents,用户找到了解决方案。

  

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

所以替换这个:

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

用这个:

pFinal.getDialog().dismiss();

它完成了所需的工作:关闭当前的preferenceScreen