Я использую представление рециркулятора в обратном порядке для отображения истории чата.
Если в чате есть только одно сообщение, оно отображается внизу (например, телеграмма). Но мне нужно отобразить это сверху.
Я застрял в этом на один день. Может ли кто-нибудь, пожалуйста, дайте мне предложение отобразить сообщение сверху в обратном порядке (как WhatsApp).
RecyclerView - обратный порядок
Ответ 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")