Подтвердить что ты не робот

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? Я надеялся, что это будет более простой процесс, чем создание другого класса.

4b9b3361

Ответ 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"/>