RecyclerView - обратный порядок

Я использую представление рециркулятора в обратном порядке для отображения истории чата.
Если в чате есть только одно сообщение, оно отображается внизу (например, телеграмма). Но мне нужно отобразить это сверху.
Я застрял в этом на один день. Может ли кто-нибудь, пожалуйста, дайте мне предложение отобразить сообщение сверху в обратном порядке (как WhatsApp).

Ответ 1

Однажды я столкнулся с такой же проблемой. Что бы я ни решал этим путем.

<android.support.v7.widget.RecyclerView
        android:id="@+id/reyclerview_message_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scrollbars="vertical"
        app:stackFromEnd="true"
        app:reverseLayout="true"/>

Ответ 2

Вы также можете использовать это:

LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setReverseLayout(true);
linearLayoutManager.setStackFromEnd(true);
myRecyclerView.setLayoutManager(linearLayoutManager);

Ответ 3

Вы можете использовать Collections.reverse(arrayList); метод для отображения истории чата в обратном порядке.
Попробуй это

ArrayList<Model> list = getList();
Collections.reverse(list);
MyRecyclerViewAdapter adapter = new MyRecyclerViewAdapter (YourActivity.this, list);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));

Ответ 4

У меня была та же проблема, но я решил ее с адаптера.

когда вы добавляете (например) JSONArray, вы можете изменить цикл следующим образом;

for (int i=pDate.length()-1; i > -1 ; i--) {
       try {
            tModelList.add(new tModel(pData.getJSONObject(i)));
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

Ответ 5

Используйте это для позиции вашего адаптера в onBindViewHolder

final int posRevers = list.size() - (position + 1);

Ответ 6

Я просто изменил порядок счетчиков ViewHolder в моем адаптере RecyclerView.

Я изменил это:

@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, final int i) {
    viewHolder.yourTextView.setText(mEntry.get(i));
}

К этому:

@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, final int i) {
    viewHolder.yourTextView.setText(mEntry.get(getItemCount()-i-1));
}

Ответ 7

Я сделал нечто подобное, что таким образом:

layoutManager = LinearLayoutManager(context).apply {stackFromEnd = true}

И записи были расположены в обратном порядке в зависимости от времени

mCursor = contentResolver.query(Uri.parse("content://sms"),
                arrayOf("body", "date", "type"),
                "address like ?",
                arrayOf("%$id"),
                "date asc")