![](/img/trans.png)
[英]How to access the LayoutManager from the RecyclerView's ItemDecoration class?
[英]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;
}
I make the change from List to Grid through a FloatingButton, changing the value of "managerL" (this is a boolean variable) so, when I press the button, the layouts change (from R.layout.item_list to R.layout_grid and viceverse ),但布局管理器仍顯示 LinearLayoutManager。
我想知道,為什么我的 RecyclerViewManager 沒有改變?
我認為您需要在每次單擊后再次設置LayoutManager
AND Adapter
:
private LinearLayoutManager lLManager;
private GridLayoutManager glManager;
private RecyclerView.Adapter sAdapter = ...
@Override
public View onCreateView(...) {
View viewPager = ...
lLManager = new LinearLayoutManager(viewPager.getContext());
glManager = new GridLayoutManager(viewPager.getContext(), 2);
if (mData.size() % 2 != 0) { ... }
setupRecycler();
viewPager.findViewById(R.id.myFab).setOnClickListener(new OnClickListener(){
public void onClick(View v) {
setupRecycler();
}
});
}
private void setupRecycler() {
recycler.setLayoutManager(managerL ? lLManager : glManager);
recycler.setAdapter(sAdapter);
}
注意:如果您重置適配器,我很確定您不需要調用notifyDataSetChanged
。
我發現我的代碼中有什么問題,我找到了一個解決方案,問題出在我的 ViewPager 的適配器中,我在這個答案中找到了解決方案: https://stackoverflow.com/a/18710611
我的 RecyclerView 沒有從 LayoutManager 更改的原因是,在我的 ViewPager 適配器中,它顯示了帶有 LayoutInflater 的 RecyclerView 布局,並且由於某種原因,這使得我的 RecyclerView 沒有在我上面留下的鏈接中從列表更改為網格,有一種更好的方法可以為 ViewPager 創建適配器,它對我有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.