Android getAdapter()在setAdapter()之后为null

Android getAdapter()在setAdapter()之后为null,android,android-adapter,android-recyclerview,Android,Android Adapter,Android Recyclerview,在片段的onCreateView方法中,我为回收器视图准备适配器: ProfileAdapter profileAdapter; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View root = inflater.inflate(R.layout.profile_list_fragment, container, false);

在片段的
onCreateView
方法中,我为回收器视图准备适配器:

ProfileAdapter profileAdapter;

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View root = inflater.inflate(R.layout.profile_list_fragment, container, false);
    ButterKnife.bind(this, root);

    setRetainInstance(true);

    if (savedInstanceState == null) {
        profileAdapter = new ProfileAdapter(getContext(), this);
        profileAdapter.items.add(...)
    }

    recyclerView.setAdapter(profileAdapter);
    recyclerView.requestFocus();
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.addItemDecoration(new RecycleViewItemDecorator(getContext()));
    recyclerView.getAdapter().notifyDataSetChanged();

    return root;
}
这工作很好。我在很多设备上测试了它。不过我刚收到一个客户的车祸报告。应用程序在此行崩溃,出现java.lang.NullPointerException

recyclerView.getAdapter().notifyDataSetChanged();
但我无法重现这个错误。为什么适配器在设置后立即为空

客户的手机是一款搭载安卓4.1的HTC手机。我的应用程序是用安卓6构建的,支持的最小版本是4.1


你看到适配器为空的原因了吗?在我看来,唯一的原因是适配器没有保留,例如在方向改变时。但是,为什么我的三星Galaxy S2(Android 4.1)上可以使用此功能,而HTC One S上不能使用此功能呢?

尝试使用
recyclerView.getAdapter().notifyDataSetChanged()
onActivityCreated
方法中,而不是
onCreateView


它可能返回
null
,因为
root
视图尚未附加到片段或活动。

尝试使用
recyclerView.getAdapter().notifyDataSetChanged()
onActivityCreated
方法中,而不是
onCreateView


它可能返回
null
,因为
root
视图尚未附加到片段或活动。

如果片段将从backstack恢复,例如,如果用户按下home按钮,活动任务将销毁,则savedState将不为null,但适配器将为空。

如果片段将从backstack恢复,例如,如果用户按下home按钮,Activity task将销毁,则savedState将不为空,但适配器将为空。

是的,看起来
savedInstanceState
不为空,因此,没有为profileAdapter设置值。您是在条件中创建profileAdapter的-显然您遇到的情况是savedInstanceState不为null,而profileAdapter为null@GreyBeardedGeek如果没有if条件,适配器将在旋转时重新创建。setRetainInstance(true)保留适配器。但是,对于客户来说,由于某些原因,它没有被保留……请尝试检查适配器是否为null而不是null。是的,它看起来像
savedInstanceState
不是null,因此没有为profileAdapter设置值。您是在条件中创建profileAdapter的-显然您遇到了savedInstanceState不为null的情况,而profileAdapter是null@GreyBeardedGeek如果没有if条件,适配器将在旋转时重新创建。setRetainInstance(true)保留适配器。但是,对于客户来说,由于某些原因,它没有被保留……请尝试检查适配器是否为空