LinearLayoutManager setReverseLayout() == true, но стек элементов снизу
Кажется, что это будет простое решение, но кажется, что установка
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private LinearLayoutManager mLayoutManager;
.... // More code
mRecyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view);
// Add item decoration
mRecyclerView.addItemDecoration(new SpacesItemDecoration(DIVIDER_SPACE));
// use this setting to improve performance if you know that changes
// in content do not change the layout size of the RecyclerView
mRecyclerView.setHasFixedSize(true);
// use a linear layout manager
mLayoutManager = new LinearLayoutManager(getActivity());
mLayoutManager.setReverseLayout(true); // THIS ALSO SETS setStackFromBottom to true
mRecyclerView.setLayoutManager(mLayoutManager);
Кажется также, чтобы элементы складывались снизу
Я пытался установить setStackFromBottom
на false, но это ничего не делало, что было бы лучшим способом изменить порядок позиций, но все же заполнить сверху? Следует ли вместо этого использовать класс Custom Comparator? Я надеялся, что это будет более простой процесс, чем создание другого класса.
Ответы
Ответ 1
из документов для setReverseLayout
Используется для изменения порядка обхода объекта и расположения макета. Это ведет себя аналогично изменению макета для просмотров RTL. Когда установлено значение true, первый элемент выложен в конце пользовательского интерфейса, второй элемент выложен перед ним и т.д. Для горизонтальных макетов это зависит от направления макета. Если установлено значение "Истина", если RecyclerView является LTR, то это будет макет из RTL, если RecyclerView} - RTL, он будет макет из LTR. Если вы ищете точное поведение setStackFromBottom(boolean)
, используйте setStackFromEnd(boolean)
Итак, попробуйте также использовать setStackFromEnd(boolean) в вашем экземпляре LinearLayoutManager,
LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);
Ответ 2
Принятый ответ работает хорошо, и я прошел через трудности, чтобы заставить его работать, поскольку я получал ошибку can not resolve method setReverseLayout
.
Затем, после поиска решений, я обнаружил глупую ошибку. Я использовал RecyclerView.LayoutManager
вместо LinearLayoutManager
.
Поэтому я подумал, что для устранения путаницы здесь нужно ответить.
Не используйте RecyclerView.LayoutManager
вместо LinearLayoutManager
// Declare your RecyclerView and the LinearLayoutManager like this
private RecyclerView mRecyclerView;
private LinearLayoutManager mLayoutManager;
...
// Now set the properties of the LinearLayoutManager
mLayoutManager = new LinearLayoutManager(MainActivity.this);
mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);
// And now set it to the RecyclerView
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setAdapter(yourAdapter);
Ответ 3
Я нашел эффективный способ решить эту проблему с помощью XML:
app:layoutManager="android.support.v7.widget.LinearLayoutManager"
app:stackFromEnd="true"
Ответ 4
Я использую RecyclerView с горизонтальной ориентацией, и по некоторым неизвестным причинам принятый ответ не сработал для меня, когда я попытался изменить макет с помощью setReverseLayout(true)
.
но работа через XML работала нормально.
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/recycler_view"
android:orientation="horizontal"
app:reverseLayout="true"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"/>