首页 > 解决方案 > 如何将 RecyclerView LayoutManager 从 List 更改为 Grid?

问题描述

我正在使用 ViewPager,我有一个 RecyclerView,在这个 RecyclerView 中,我想将 LayoutManager 从 List 更改为 Grid。

我已经实现了这段代码:

 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 没有改变?

标签: javaandroidandroid-recyclerviewgridlayoutmanagerlinearlayoutmanager

解决方案


我发现我的代码中有什么问题,我找到了一个解决方案,问题出在我的 ViewPager 的适配器中,我在这个答案中找到了解决方案:https ://stackoverflow.com/a/18710611

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


推荐阅读