【发布时间】:2011-08-08 11:06:17
【问题描述】:
我已经用 xml 文件在程序中编写了一个多级首选项。我想知道如何在不按返回按钮的情况下返回上一级。 如何编写一些代码来实现一个项目以返回先前的 Preferences 级别。
【问题讨论】:
标签: android preferences
我已经用 xml 文件在程序中编写了一个多级首选项。我想知道如何在不按返回按钮的情况下返回上一级。 如何编写一些代码来实现一个项目以返回先前的 Preferences 级别。
【问题讨论】:
标签: android preferences
我遇到了同样的问题,感谢雪龙和getDialog()解决了,但不需要管理onPreferenceTreeClick()。
然后你会从你原来的地方回来。
这是一个经过净化的例子:
XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<ListPreference android:key="contactList"/>
<PreferenceScreen android:title="My Sub Preference Screen ..."
android:key="mySubScreenKey">
<EditTextPreference android:key="foo1"/>
</PreferenceScreen>
</PreferenceScreen>
Java 文件:
public class ParanoidPreferenceManager extends PreferenceActivity {
ListPreference contactList;
EditTextPreference foo1;
PreferenceScreen mySubScreenKey;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Load XML preference file
addPreferencesFromResource(R.xml.preferences);
contactList = (ListPreference) findPreference("contactList");
foo1= (EditTextPreference) findPreference("foo1");
screenContact = (PreferenceScreen) findPreference("screenAddContact");
foo1.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
mySubScreenKey.getDialog().dismiss();
return false;
}
});
}
}
就是这样
抱歉,这是我在这个网站上的第一篇文章。
再见,伙计们
【讨论】:
在帕特里斯和雪龙的回答的基础上,我制作了以下功能来轻松完成这项工作:
// Refresh the content of a PreferenceScreen by simulating a click (thus it will call the refresh code if it's contained inside the click callback)
private void refreshPreferenceScreenByClick(String prefScreenName) {
// Refresh preference screen (given by its name) by calling the click callback
PreferenceScreen prefScreen = (PreferenceScreen) findPreference(prefScreenName);
Preference.OnPreferenceClickListener click_callback = prefScreen.getOnPreferenceClickListener();
click_callback.onPreferenceClick(prefScreen);
}
// Close the current PreferenceScreen (or any given the name)
// Useful to go back to the previous PreferenceScreen when constructing dynamically nested submenus.
private void closePreferenceScreen(String prefScreenName) {
PreferenceScreen prefScreen = (PreferenceScreen) findPreference(prefScreenName);
prefScreen.getDialog().dismiss();
}
首先,如果您在子菜单中定义父菜单上显示的内容(例如在音乐应用程序中:子菜单允许添加新乐器,父菜单显示添加的乐器列表),您首先拥有调用refreshPreferenceScreenByClick("parentPreferenceScreen"),然后返回父菜单,您可以通过调用closePreferenceScreen("currentPreferenceScreen")关闭当前子菜单。
或者,如果您只想以编程方式打开子菜单,可以使用此处的 openPreference 函数(经过测试,效果很好):https://stackoverflow.com/a/4869034/1121352
注意:不要使用 openPreference() 函数返回父 PreferenceScreen,因为在几次迭代之后,您会遇到堆栈溢出并且您的应用程序会崩溃(因为 Android 会将所有先前菜单的历史记录保存在内存中,包括你通过 openPreference() 打开的那些!)。
【讨论】:
您可以模拟按下后退按钮:
this.onBackPressed();
或
getActivity().onBackPressed();
如果你在一个片段中。
【讨论】:
我认为您正在寻找类似的东西
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:key="NotifSettings" android:title="Notification Settings">
<PreferenceCategory android:title="Notification Settings">
<CheckBoxPreference android:key="NotifyOption"
android:title="Notification Status" android:defaultValue="true"
android:summaryOn="Notifications are Enabled." android:summaryOff="Notifications are Disabled."
android:persistent="true" />
<Preference android:title="XXXX"
android:dependency="NotifyOption" android:summary="xxxxxx"
android:key="Xxx" />
</PreferenceCategory>
<PreferenceCategory android:title="YYYYY">
<PreferenceScreen android:title="Configure Notifications"
android:summary="yyyyy">
<CheckBoxPreference android:key="aa"
android:title="aaaaa" android:defaultValue="true"
android:summary="aaaa" />
<CheckBoxPreference android:key="bb"
android:title="bbbbb" android:defaultValue="true"
android:summary="bbbb." />
...
<ListPreference android:title="zzz"
android:summary="zzzz" android:key="zz"
android:defaultValue="0" android:entries="@array/OverDesc"
android:entryValues="@array/OverValues" />
</PreferenceScreen>
</PreferenceCategory>
<PreferenceCategory android:title="Alert Type">
<CheckBoxPreference android:key="AlertVibr"
android:title="Vibrate" android:defaultValue="true"
android:summaryOn="Vibration Turned ON" android:summaryOff="Vibration Turned OFF" />
<CheckBoxPreference android:key="AlertSound"
android:title="Sound" android:defaultValue="true" android:summaryOn="Sound Turned ON"
android:summaryOff="MUTE" />
</PreferenceCategory>
但我没有得到的是您想要返回上一个首选项屏幕,而不按返回按钮。你能更详细地说明一下吗?
【讨论】: