我正在使用我的PreferenceActivity,我有一个SwitchPreference,我没有使用android:title="Title"访问它的标题,因为我想在Switch被点击时更改它。
我试过这种方法,但行不通。我也在相关的主题上搜索,但没有解决我的问题。
public class PrefsFragment extends PreferenceFragment {
private SwitchPreference pref;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
// Load the preferences from an XML resource
pref = (SwitchPreference)findPreference("SWITCH");
pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (newValue.toString().equals("SWITCH")) {
boolean test = (Boolean) newValue;
if (test) {
pref.setTitle("ChangedTitle");
} else {
pref.setTitle("DefaultTitle");
}
}
return true;
}
});
}
}settings.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="Settings">
<ListPreference
android:key="yourPref"
android:title="Title"
android:dialogTitle="Select"
android:summary="%s"
android:defaultValue="4"
android:entries="@array/titles"
android:entryValues="@array/values"/>
</PreferenceCategory>
<PreferenceCategory
android:title="Title">
<SwitchPreference
android:key="SWITCH"/>
</PreferenceCategory>
</PreferenceScreen>你能帮我个忙吗?
发布于 2016-08-26 03:45:01
尝试在侦听器回调中调用preference.setTitle("YOUR TEXT");,而不是pref.setTitle"YOUR TEXT");侦听器传入已更改的首选项。
发布于 2020-10-22 21:56:52
问题出在你的OnSharedPreferenceChangeListener上。而不是这个,
pref = (SwitchPreference)findPreference("SWITCH");
pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (newValue.toString().equals("SWITCH")) {
boolean test = (Boolean) newValue;
if (test) {
pref.setTitle("ChangedTitle");
} else {
pref.setTitle("DefaultTitle");
}
}
return true;
}
});尝尝这个
SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) {
if (s.equals("SWITCH")) {
SwitchPreference sp = (SwitchPreference) findPreference(s);
boolean test = sharedPreferences.getBoolean(s, false);
if (test) {
sp.setTitle("ChangedTitle");
} else {
sp.setTitle("DefaultTitle");
}
}
}
}https://stackoverflow.com/questions/39152571
复制相似问题