最好的方式RecyclerView更改itemLayout的所有项目?

时间:2017-11-04 18:59:44

标签: android android-recyclerview recycler-adapter recyclerview-layout

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

我查看了所有和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);
}

有更好的方法吗?

UPDATE:发现错误,只需覆盖@Override     public int getItemViewType(int position)并返回所需的viewtype

这将使

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

像魅力一样工作

1 个答案:

答案 0 :(得分:1)

做类似的事情:

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

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