私のアプリケーションでは、PreferenceFragmentを使用して、タブレットとスマートフォンですばらしいアプリケーションを作成しました。getActivity()はPreferenceFragmentでnullを返します
だから、私のメインの活動では、私が使用:
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preference_headers, target);
}
私の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>
問題は、私が更新するために、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());
}
}
大きな問題は、私は私のXMLヘッダ内に複数のカテゴリがある場合getActivity()がnullであるということです! 私が最初に開いたのは、常に正確で非ヌルですが、私が後ろを押すと、自動的に生成されたプリファレンス・リストに戻ってきて、もう1つをクリックします。
これは私が持っていた問題を解決しました。 getActivityは、フラグメントをホストしたアクティビティに戻る場合を除いて正常に機能しました。私の場合、http://developer.android.com/guide/topics/ui/settings.html#Listeningに記載されているように、リスナーをonResumeに再度登録する必要もありました。ソリューションを投稿していただきありがとうございます。 – ndsc
解決に感謝します。しかし、私はonStop()でそれを使用します。 – Dpedrinha
実際に 'onCreate' /' onStart'に登録した場合は、 'onDestroy' /' onStop'でそれを登録解除する必要があります。 'onResume'に登録した場合、' onPause'で登録を解除するとうまく動作します。 – Mygod