Android 在 PreferenceFragment 中使用 findViewById 会给出 NullPointerException

Posted

技术标签:

【中文标题】Android 在 PreferenceFragment 中使用 findViewById 会给出 NullPointerException【英文标题】:Android use findViewById in PreferenceFragment gives NullPointerException 【发布时间】:2021-06-10 18:35:07 【问题描述】:

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

<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

我做错了什么?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于Android 在 PreferenceFragment 中使用 findViewById 会给出 NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android中启动JAVA程序

android中怎么设置组件在LinearLayout中居中

如何在android源代码中打印出日志

求教怎么在android的Logcat中输出日志

如何在Android中取得当前进程名

skia项目运行在Android.4.2,Android 4.2和Android 2.2有区别吗?