如何将 RecyclerView LayoutManager 从列表更改为网格?
How to change RecyclerView LayoutManager from List to 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 没有改变?
我发现我的代码中存在什么问题,并找到了解决方案,问题出在我的 ViewPager 的适配器中,我在这个答案中找到了解决方案:
我的 RecyclerView 没有从 LayoutManager 改变的原因是,在我的 ViewPager 适配器中,它显示了带有 LayoutInflater 的 RecyclerView 布局,出于某种原因,这使得我的 RecyclerView 没有从列表更改为网格,在link 我在上面留下的,有一种更好的方法来为 ViewPager 创建适配器,它是对我有用的方法。
我正在使用一个 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 没有改变?
我发现我的代码中存在什么问题,并找到了解决方案,问题出在我的 ViewPager 的适配器中,我在这个答案中找到了解决方案:
我的 RecyclerView 没有从 LayoutManager 改变的原因是,在我的 ViewPager 适配器中,它显示了带有 LayoutInflater 的 RecyclerView 布局,出于某种原因,这使得我的 RecyclerView 没有从列表更改为网格,在link 我在上面留下的,有一种更好的方法来为 ViewPager 创建适配器,它是对我有用的方法。