Why am I getting a null reference on my RecyclerView

后端 未结 5 738
攒了一身酷
攒了一身酷 2021-02-02 12:37

I am trying to use the RecyclerView in my fragments. It shows up fine for the first tab, but when I swipe to the second tab and then back to the first one I get the following er

5条回答
  •  粉色の甜心
    2021-02-02 13:28

    It seems that If you have a RecyclerView in your layout and you load it in the Activity, it is a must to set a LayoutManager for it, else it will throw this Exception when trying to destroy it. I have just experienced this error and this is the way I've solved it:

    My activity showed elements in a pair of TextViews or in a RecyclerView depending on the amount of items: if it was a collection of items, I used the RecyclerView; if there was only one item, it was displayed on the TextViews and I set the RecyclerView's visibility to GONE.

    Then, in the first case, I called myRecyclerView.setLayoutManager(myLayoutManager), but in the other case I didn't, for I wasn't going to use it. In both cases, the Activity containing the RecyclerView was displayed perfectly. But when closing it, the Exception was thrown in the second case because the RecyclerView, though not used, existed and when trying to dispose of it, it seems it couldn't. So I just assigned the LayoutManager in both cases although I wasn't using it, and this solved the issue.

    Here's the code from my Activity:

    ItemsAdapter adapter;
    RecyclerView myRecyclerView = findViewById(R.id.my_recycler_view);
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
    
    if (items.size() > 1){
        adapter = new ItemsAdapter(this, R.layout.item_layout, items);
        myRecyclerView.setLayoutManager(layoutManager);
        myRecyclerView.setAdapter(adapter);
    } else {
        tv_field1.setText(items.get(0).getField1());
        tv_field2.setText(items,get(0).getField2());
        myRecyclerView.setVisibility(View.GONE);
    
        //This is what I had to add
        myRecyclerView.setLayoutManager(layoutManager);
    }
    

提交回复
热议问题