回收器在充气时查看片段错误



我想在片段中显示回收器视图中的 JSONObject 中的数据,但出现错误

原因:android.view.InflateException:二进制XML文件行#35: 二进制 XML 文件行 #35:膨胀类片段时出错

原因:android.view.InflateException:二进制XML文件行#35: 膨胀类片段时出错

由以下原因引起:java.lang.NullPointer异常:尝试调用虚拟方法 'android.view.View android.view.View.findViewById(int(' on a null 对象引用

主要活动.java

...
@Override
public void onListFragmentInteraction(int position) {
mToast = Toast.makeText(this, "Clicked " + position, Toast.LENGTH_LONG);
mToast.show();
}
void createFragment(){
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
mDiscoverFragment = new DiscoverFragment();
fragmentTransaction.replace(R.id.discover_fragment, mDiscoverFragment);
fragmentTransaction.commit();
}
...

片段.java

...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDiscoverList = (RecyclerView) getView().findViewById(R.id.discover_list);
LinearLayoutManager gridLayoutManager = new LinearLayoutManager(getContext());
mDiscoverList.setLayoutManager(gridLayoutManager);
mDiscoverList.setHasFixedSize(true);
try {
mAdapter = new DiscoverAdapter(new DiscoverContent().getItems(), mListener);
} catch (JSONException e) {
e.printStackTrace();
}
mAdapter.notifyDataSetChanged();
mDiscoverList.setAdapter(mAdapter);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_discover_list, container, false);
return view;
}
...

有人可以告诉我是什么导致了问题吗?

您正在尝试在布局和视图"准备就绪"之前访问布局和视图。

将以下行移动到onCreateView()方法:

mDiscoverList = (RecyclerView) getView().findViewById(R.id.discover_list);
LinearLayoutManager gridLayoutManager = new LinearLayoutManager(getContext());
mDiscoverList.setLayoutManager(gridLayoutManager);
mDiscoverList.setHasFixedSize(true); 

最终结果应如下所示:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_discover_list, container, false);
mDiscoverList = (RecyclerView) view.findViewById(R.id.discover_list);
LinearLayoutManager gridLayoutManager = newLinearLayoutManager(getContext());
mDiscoverList.setLayoutManager(gridLayoutManager);
mDiscoverList.setHasFixedSize(true); 
return view;
}