getAdapter()在setAdapter()之后为null

时间:2015-11-02 21:54:34

标签: 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);
    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();

但我无法重现此错误。为什么适配器在设置后才能为空?

客户手机是带有android 4.1的HTC One S.我的应用程序是用android 6构建的,min支持的版本是4.1。

您是否看到适配器为空的原因?从我的观点来看,唯一的原因是适配器没有被保留,例如关于方向改变。但是为什么这个应该在我的三星Galaxy S2(Android 4.1)而不是在HTC One S上工作?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

如果Fragment将从backstack恢复,例如,如果用户按下home按钮并且Activity任务将销毁,则savedState将不为null,但适配器将为。