在片段的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上工作?
答案 0 :(得分:0)
尝试在recyclerView.getAdapter().notifyDataSetChanged();
方法而不是onActivityCreated
中使用
onCreateView
。
它可能会返回null
,因为root
视图尚未附加到片段或活动。
答案 1 :(得分:0)
如果Fragment将从backstack恢复,例如,如果用户按下home按钮并且Activity任务将销毁,则savedState将不为null,但适配器将为。