Waz*_*_Be 4 android fragment preference
在我的应用程序中,我使用PreferenceFragment在平板电脑和智能手机上创建一个不错的应用程序.
所以,在我的主要活动中,我使用:
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preference_headers, target);
}
Run Code Online (Sandbox Code Playgroud)
我的xml文件如下所示:
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
<header android:fragment="tof.cv.mpp.view.StockPreferenceFragment"
android:title="@string/btn_home_settings" android:summary="">
<extra android:name="resource" android:value="activity_preferences" />
</header>
<header android:fragment="tof.cv.mpp.view.StockPreferenceFragment"
android:title="@string/btn_home_planner" android:summary="">
<extra android:name="resource" android:value="activity_planner_preferences" />
</header>
<header android:fragment="tof.cv.mpp.view.StockPreferenceFragment"
android:title="@string/btn_home_twitter" android:summary="">
<extra android:name="resource" android:value="activity_twitter_preferences" />
</header>
</preference-headers>
Run Code Online (Sandbox Code Playgroud)
问题是,我现在想要使用OnSharedPreferenceChangeListener来更新我的一些偏好的摘要.
我用:
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
Log.i("", "PREFChanged "+getActivity());
if (key.contentEquals("prefPseudo")) {
Log.i("", "PseudoChanged");
Preference pref = findPreference("prefPseudo");
pref.setSummary(((EditTextPreference) pref).getText());
}
if (key.contentEquals(getString(R.string.key_activity))) {
Log.i("", "FirstChanged");
Preference pref = findPreference(getString(R.string.key_activity));
pref.setSummary(((ListPreference) pref).getEntry());
}
if (key.contentEquals(getString(R.string.key_planner_da))) {
Preference pref = findPreference(getString(R.string.key_planner_da));
Log.i("", "PlannerChanged"+pref);
pref.setSummary(((ListPreference) pref).getEntry());
}
}
Run Code Online (Sandbox Code Playgroud)
我面临的一个大问题是,当我的xml标题中有多个类别时,getActivity()为null!我打开的第一个总是正确且非空,但当我按下时,我回到自动生成的首选项列表,我点击第二个,那里,活动为空!
Waz*_*_Be 10
哎哟!那是一个艰难的过程.我成功解决了这个问题.
实际上,Listener始终属于第一个片段.因此,当您更改其他类别的首选项时,更改第二个片段的首选项时,将调用第一个片段的侦听器!
所以Activity是null.
解决方案是在离开Fragment时删除侦听器,因此正确的侦听器可以完成其工作:
@Override
public void onPause() {
super.onPause();
Log.i("", "PAUSE");
preferences.unregisterOnSharedPreferenceChangeListener(this);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4549 次 |
| 最近记录: |