我在更新PreferncesFragment的汇总值方面遇到了问题。我试图遵循帖子的建议:Updating sharedPreferences Summary via listener但它不起作用!摘要不会更新......
我不明白出了什么问题?感谢您的帮助!
我的pref文件:
<CheckBoxPreference android:key="is_title" android:summary="@string/conf_istitle_sum" android:title="@string/conf_istitle_title" android:defaultValue="true" />
<EditTextPreference
android:key="sms_title"
android:title="@string/conf_sms_title"
android:summary="@string/msgtitre"
android:dialogTitle="@string/conf_diagsms_title"
android:dialogMessage="@string/conf_diagsms_sum"
android:defaultValue="@string/msgtitre"
/>
我的偏好课程:
公共类SetPreferenceActivity扩展PreferenceActivity实现OnSharedPreferenceChangeListener { protected MyPreferenceFragment settingsFragment;
@Override
protected void onCreate(final Bundle savedInstanceState)
{ settingsFragment = new MyPreferenceFragment();
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content,
settingsFragment).commit();
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
if (key.equals("sms_title")) {
String newValue = sharedPreferences.getString(key, "");
settingsFragment.findPreference(key).setSummary(newValue);
}
}
public static class MyPreferenceFragment extends PreferenceFragment
{
@Override
public void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
}
&#34; old&#34;工作的是什么?已弃用解决方案OldPreferences
答案 0 :(得分:1)
请检查是否正在调用onSharedPreferenceChanged
。您需要使用您的首选项注册处理程序。第一,
在onCreate
:
public class SettingsActivity
extends AppCompatActivity
implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
// ...
}
在活动的生命周期中(请注意,我使用普通AppCompatActivity
而不是PreferenceActiviy
)注册handeler。
@Override
protected void onPause() {
super.onPause();
preferences.unregisterOnSharedPreferenceChangeListener(this);
}
@Override
protected void onResume() {
super.onResume();
preferences.registerOnSharedPreferenceChangeListener(this);
}
现在,应该调用处理程序:
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Log.d(DEBUG_TAG, key);
// fragment.findPreference(key) //... TBD
}