Android 在 PreferenceFragment 中使用 findViewById 给出 NullPointerException

问题描述

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

<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");
    }

}

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

我做错了什么?

解决方法

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

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