【问题标题】:Best way RecyclerView change itemLayout of all items?RecyclerView 更改所有项目的 itemLayout 的最佳方式?
【发布时间】:2017-11-04 18:59:44
【问题描述】:

我想要一个按钮来切换 recyclerView 的 list_item_layout。

我在 so 和这个 https://github.com/gjiazhe/LayoutSwitch 上查看了各种示例(但它正在处理 gridlayoutmanager)我需要列表布局管理器,但需要不同的布局文件。

但在我的情况下,我 onScroll 加载了更多项目,当我只更改适配器参数变量和 notifychange 时,就像在该代码中一样,我有混合。有些项目仍然使用旧布局。

所以我重新创建了适配器,但我认为这不是解决这个问题的最佳方法。

这是我的最终代码 sn-p

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) 并返回需要的视图类型

这会让

mAdapter.setLayoutType(newType);
mAdapter.notifyDataSetChanged();

像魅力一样工作

【问题讨论】:

    标签: android android-recyclerview recyclerview-layout


    【解决方案1】:

    做类似的事情:

    mAdapter.setLayoutType(ItemsAdapter.TYPE_LIST);
    mAdapter.notifyDataSetChanged();
    

    应该是你所需要的。如果这就是您所做的并且它不起作用,请使用一个适配器发布您的原始代码。

    【讨论】:

      猜你喜欢
      • 2022-01-25
      • 1970-01-01
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多