RecyclerView 更改所有项目的 itemLayout 的最佳方式?
Best way RecyclerView change itemLayout of all items?
我想要一个按钮来为 recyclerView 切换 list_item_layout。
我在 so 和 this https://github.com/gjiazhe/LayoutSwitch 上查看了各种示例(但它正在处理 gridlayoutmanager)我需要列表布局管理器,但需要不同的布局文件。
但在我的例子中,我 onScroll 加载了更多项目,当我只更改更改适配器参数变量和 notifychange 时,就像在该代码中一样,我混合了。有些项目仍然使用旧布局。
所以我重新创建了适配器,但我认为这不是解决这个问题的最佳方法。
这是我的最终代码片段
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_no_image_view) {
int lastFirstVisiblePosition = ((LinearLayoutManager)mRecyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition();
mAdapter = new ItemsAdapter(getContext(), mPostsList, this);
mAdapter.setLayoutType(ItemsAdapter.TYPE_LIST);
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.getLayoutManager().scrollToPosition(lastFirstVisiblePosition);
return true;
}
return super.onOptionsItemSelected(item);
}
有没有更好的制作方法?
更新:发现错误,只需要覆盖@Override
public int getItemViewType(int position) 和 return 需要视图类型
这将使
mAdapter.setLayoutType(newType);
mAdapter.notifyDataSetChanged();
像魅力一样工作
做类似的事情:
mAdapter.setLayoutType(ItemsAdapter.TYPE_LIST);
mAdapter.notifyDataSetChanged();
应有尽有。如果那是你正在做的,但它不起作用,请 post 使用一个适配器的原始代码。
我想要一个按钮来为 recyclerView 切换 list_item_layout。
我在 so 和 this https://github.com/gjiazhe/LayoutSwitch 上查看了各种示例(但它正在处理 gridlayoutmanager)我需要列表布局管理器,但需要不同的布局文件。
但在我的例子中,我 onScroll 加载了更多项目,当我只更改更改适配器参数变量和 notifychange 时,就像在该代码中一样,我混合了。有些项目仍然使用旧布局。
所以我重新创建了适配器,但我认为这不是解决这个问题的最佳方法。
这是我的最终代码片段
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_no_image_view) {
int lastFirstVisiblePosition = ((LinearLayoutManager)mRecyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition();
mAdapter = new ItemsAdapter(getContext(), mPostsList, this);
mAdapter.setLayoutType(ItemsAdapter.TYPE_LIST);
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.getLayoutManager().scrollToPosition(lastFirstVisiblePosition);
return true;
}
return super.onOptionsItemSelected(item);
}
有没有更好的制作方法?
更新:发现错误,只需要覆盖@Override public int getItemViewType(int position) 和 return 需要视图类型
这将使
mAdapter.setLayoutType(newType);
mAdapter.notifyDataSetChanged();
像魅力一样工作
做类似的事情:
mAdapter.setLayoutType(ItemsAdapter.TYPE_LIST);
mAdapter.notifyDataSetChanged();
应有尽有。如果那是你正在做的,但它不起作用,请 post 使用一个适配器的原始代码。