将 RecyclerView 添加到 Fragment 时出现 NullPointerException
NullPointerException when adding RecyclerView to Fragment
在我片段的 onCreateView 方法中,我正在膨胀一个包含 RecyclerView 的布局。但是,当我尝试引用该视图时,我在以下行收到 NullPointerException:
mRecyclerView.setLayoutManager(mStaggeredLayoutManager);
我做错了什么?
这是我的代码:
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstance){
final StaggeredGridLayoutManager mStaggeredLayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);
mRecyclerView = (RecyclerView)getActivity().findViewById(R.id.list);
mRecyclerView.setLayoutManager(mStaggeredLayoutManager);
mRecyclerView.setHasFixedSize(true); //Data size is fixed - improves performance
mAdapter = new TravelListAdapter(getActivity());
mRecyclerView.setAdapter(mAdapter);
return inflater.inflate(R.layout.start_fragment,container,false);
}
你正在做 getActivity.findViewById()
,这是行不通的。您刚刚创建了视图,但它尚未附加到 activity。为此,您必须在片段的视图中找到视图,而不是 activity 的视图。
首先,膨胀片段的视图,然后inflatedView.findViewById(R.id.list)
。
示例:
public View onCreateView(...){
View inflatedView = inflater.inflate(R.layout.start_fragment, container, false);
mRecyclerView = (RecyclerView) inflatedView.findViewById(R.id.list);
return inflatedView;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
final StaggeredGridLayoutManager mStaggeredLayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);
mRecyclerView = (RecyclerView) view.findViewById(R.id.list);
mRecyclerView.setLayoutManager(mStaggeredLayoutManager);
mRecyclerView.setHasFixedSize(true);
mAdapter = new TravelListAdapter(getActivity());
mRecyclerView.setAdapter(mAdapter);
super.onViewCreated(view, savedInstanceState);
}
这就是我要做的
在我片段的 onCreateView 方法中,我正在膨胀一个包含 RecyclerView 的布局。但是,当我尝试引用该视图时,我在以下行收到 NullPointerException:
mRecyclerView.setLayoutManager(mStaggeredLayoutManager);
我做错了什么?
这是我的代码:
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstance){
final StaggeredGridLayoutManager mStaggeredLayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);
mRecyclerView = (RecyclerView)getActivity().findViewById(R.id.list);
mRecyclerView.setLayoutManager(mStaggeredLayoutManager);
mRecyclerView.setHasFixedSize(true); //Data size is fixed - improves performance
mAdapter = new TravelListAdapter(getActivity());
mRecyclerView.setAdapter(mAdapter);
return inflater.inflate(R.layout.start_fragment,container,false);
}
你正在做 getActivity.findViewById()
,这是行不通的。您刚刚创建了视图,但它尚未附加到 activity。为此,您必须在片段的视图中找到视图,而不是 activity 的视图。
首先,膨胀片段的视图,然后inflatedView.findViewById(R.id.list)
。
示例:
public View onCreateView(...){
View inflatedView = inflater.inflate(R.layout.start_fragment, container, false);
mRecyclerView = (RecyclerView) inflatedView.findViewById(R.id.list);
return inflatedView;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
final StaggeredGridLayoutManager mStaggeredLayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);
mRecyclerView = (RecyclerView) view.findViewById(R.id.list);
mRecyclerView.setLayoutManager(mStaggeredLayoutManager);
mRecyclerView.setHasFixedSize(true);
mAdapter = new TravelListAdapter(getActivity());
mRecyclerView.setAdapter(mAdapter);
super.onViewCreated(view, savedInstanceState);
}
这就是我要做的