我在程序中用xml文件编写了一个多级首选项。我想知道如何在不按后退按钮的情况下返回上一级别。 如何编写一些代码来优先实现项目以返回先前的首选项级别。
答案 0 :(得分:1)
您可以模拟按下后退按钮:
this.onBackPressed();
或
getActivity().onBackPressed();
如果你是一个片段。
答案 1 :(得分:0)
我认为你正在寻找像这样的东西
<?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>
但我没有得到的是你想要返回上一个偏好屏幕,而不是按下后退按钮。你能否对此有所了解?
答案 2 :(得分:0)
由于Xuelong和 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;
}
});
}
}
就是这样
很抱歉,这是我在这个网站上的第一篇文章。
Bye dudes
答案 3 :(得分:0)
在Patrice&Xuelong的答案的基础上,我已经做了以下功能来轻松完成这项工作:
// 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()打开的那些!)。