如何将RecyclerView LayoutManager从列表更改为网格?

时间:2019-11-13 16:17:33

标签: java android android-recyclerview gridlayoutmanager linearlayoutmanager

我正在使用ViewPager,但我有一个RecyclerView,在此RecyclerView中,我想将LayoutManager从“列表”更改为“网格”。

我已经实现了以下代码:

 void setLManager(boolean managerL){
    GridLayoutManager glManager = new GridLayoutManager(viewPager.getContext(), 2);
      if (mData.size() % 2 != 0) {
          final int item = mData.size() - 1;
          glManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
              @Override
              public int getSpanSize(int position) {
                  return position == item ? 2 : 1;
              }
          });
      }
    LinearLayoutManager lLManager = new LinearLayoutManager(viewPager.getContext());

    recycler.setLayoutManager(managerL ? lLManager : glManager);
    sAdapter.notifyDataSetChanged();
    recycler.setAdapter(sAdapter);
}

在RecyclerView的onCreateViewHolder上,我具有以下代码:

@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View v;

        int layout = 0;

        if(viewType == Util.LIST){

            layout = R.layout.item_list;

        }else {

            layout = R.layout.item_grid;

        }
        v = LayoutInflater.from(mContext).inflate(layout, parent, false);
        viewHolder = new RecyclerView.ViewHolder(v);
        return viewHolder; 
}

我通过FloatingButton从List更改为Grid,更改了“ managerL”的值(这是一个布尔变量),因此,当我按下该按钮时,布局也会更改(从R.layout.item_list更改为R。 layout_grid,反之亦然),但布局管理器仍显示LinearLayoutManager。

我想知道,为什么我的RecyclerViewManager没有更改?

1 个答案:

答案 0 :(得分:0)

我找到了代码中的问题,并找到了解决方案,问题出在ViewPager的适配器中,我在以下答案中找到了解决方案:https://stackoverflow.com/a/18710611

我的RecyclerView不会从LayoutManager更改的原因是,在我的ViewPager适配器中,它显示了带有LayoutInflater的RecyclerView布局,并且由于某种原因,这使得我的RecyclerView不在链接中从列表更改为网格我在上面离开了,有一种更好的方法可以为ViewPager创建适配器,这对我来说很有效。