繁体   English   中英

充气时的RecyclerView Fragment错误

[英]RecyclerView Fragment error at inflating

我想在片段的RecyclerView中显示来自JSONObject的数据,但出现错误

原因:android.view.InflateException:二进制XML文件第35行:二进制XML文件第35行:夸大类片段的错误

原因:android.view.InflateException:二进制XML文件第35行:膨胀类片段的错误

原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'android.view.View android.view.View.findViewById(int)'

MainActivity.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();
}
...

Fragment.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()移动到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;
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM