Лучший способ RecyclerView изменить itemLayout всех элементов?

Я хочу, чтобы кнопка переключала list_item_layout для recyclerView.

Я просмотрел различные образцы на так и на этом https://github.com/gjiazhe/LayoutSwitch ( но дело в gridlayoutmanager) Мне нужен менеджер компоновки списка, но разные файлы компоновки.

Но в моем случае я onScroll загружаю больше элементов, и когда я меняю только переменную параметра адаптера изменения и уведомляю об изменении, как в этом коде, у меня есть смесь. Некоторые элементы по-прежнему используют старую раскладку.

Поэтому я воссоздал адаптер, но я думаю, что это не лучший способ решить эту проблему.

Вот мой последний фрагмент кода

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();

работай как шарм


person android_dev    schedule 04.11.2017    source источник


Ответы (1)


Делать что-то вроде:

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

Должно быть все, что вам нужно. Если это то, что вы делали, и это не сработало, опубликуйте исходный код с одним адаптером.

person dominicoder    schedule 04.11.2017