Android在PreferenceFragment中使用findViewById会产生NullPointerExcep



我有一个包含自定义布局的首选项屏幕:

<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<Preference
android:key="myKey"
android:layout="@layout/my_layout" />

<ListPreference
app:defaultValue="@string/defaultGender"
app:entries="@array/gender_entries"
app:entryValues="@array/gender_values"
app:key="gender"
app:title="@string/gender"
app:useSimpleSummaryProvider="true" />

我正在尝试在my_layout:中设置TextView的值

public static class MyFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.preference_screen, rootKey);
TextView textView= (TextView) this.getActivity().findViewById(R.id.myTextView);
textView.setText("XXX");
}
}

但我在textView.setText("XXX");上得到了NullPointerException

我做错了什么?

尝试在onViewCreated函数中设置文本。

@Override
public void onViewCreated (View view, Bundle savedInstanceState) {
TextView textView= (TextView) this.getActivity().findViewById(R.id.myTextView);
textView.setText("XXX");
}

我认为您需要用自己的类扩展Preference,然后重写onBindViewHolder(…(方法。类似这样的东西:

public class AppDialogPreference extends DialogPreference {
...
public void onBindViewHolder(@NonNull PreferenceViewHolder viewHolder) {
super.onBindViewHolder(viewHolder);
View helpView = viewHolder.findViewById(R.id.help_button);
...

相关内容

最新更新