我的代码如下:
(注意:请注意底部的行,我会收到NullPointerException的报告。此外,这个帖子已经过大量编辑,但我相信所有相关的代码都包括在内)
public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
public SettingsActivity activity;
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof Activity) {
activity = (SettingsActivity) context;
}
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
final SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getActivity());
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String prefKey) {
// The line below gets many NullPointerException reports
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(activity);
}
}
我认为在activity
中设置onAttach()
变量几乎可以确保它不为空。 (而不是使用getActivity()
)
我拥有getActivity()
的实例有0个报告永远为空。我似乎只需要使用它。 但我想知道活动是如何为空并将其更改为getActivity()
的方式?
FWIW,我在这堂课中没有使用onDetach()
。
只是一个猜测:在我看来onAttach()
可以在调用onSharedPreferenceChanged()
之前调用好,所以那时候activity
可能会变为空?
activity
变量总是存在null
变量的可能性,而且该行中还有其他内容,但这似乎对我来说最明显?
答案 0 :(得分:0)
你应该使用
@Override
public void onAttach (Activity activity) {
super.onAttach(activity)
}
代替
@Override
public void onAttach (Context context) {
super.onAttach(context)
}
虽然第一个函数已被弃用但它仍然可以正常工作。试试吧。