我以相反的顺序使用回收站视图来显示聊天记录 如果聊天中只有一条消息,它会在底部显示消息(如电报)。但我需要从顶部显示它 我被困在这一天。任何人都可以给我一个建议,以回收顺序(如whatsapp)从顶部显示消息。
答案 0 :(得分:13)
我某天前遇到同样的问题。无论我通过这种方式解决这个问题。
<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"/>
答案 1 :(得分:13)
您还可以使用此:
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setReverseLayout(true);
linearLayoutManager.setStackFromEnd(true);
myRecyclerView.setLayoutManager(linearLayoutManager);
答案 2 :(得分:9)
您可以使用 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()));
答案 3 :(得分:2)
Android recyclerview 在 kotlin 中逆序或逆向布局
val linearLayoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, true)
linearLayoutManager.stackFromEnd = true
答案 4 :(得分:1)
这是Java最短的解决方案:
LinearLayoutManager lm = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, true); // last argument (true) is flag for reverse layout
myRecyclerView.setLayoutManager(lm);
答案 5 :(得分:0)
我遇到了同样的问题,但是从它自己的适配器解决了它。
当您添加(例如)JSONArray时,您可以按如下方式反转循环;
for (int i=pDate.length()-1; i > -1 ; i--) {
try {
tModelList.add(new tModel(pData.getJSONObject(i)));
} catch (JSONException e) {
e.printStackTrace();
}
}
答案 6 :(得分:0)
将其用于onBindViewHolder中的适配器位置
final int posRevers = list.size() - (position + 1);
答案 7 :(得分:0)
我只是在RecyclerView适配器中更改了ViewHolder计数器顺序。
我已经更改了此
@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));
}
答案 8 :(得分:0)
我以这种方式做了类似的事情:
layoutManager = LinearLayoutManager(context).apply {stackFromEnd = true}
然后根据时间反向排列记录
mCursor = contentResolver.query(Uri.parse("content://sms"),
arrayOf("body", "date", "type"),
"address like ?",
arrayOf("%$id"),
"date asc")
答案 9 :(得分:0)
与Kotlin:
mList.asReversed() // mList : List<Modelo>
答案 10 :(得分:0)
是的,实现此目标的方法不同,但有一个问题是,添加新项目后,回收者视图将不会显示新项目,您必须手动向下滚动列表。这不是用户友好的。为了解决这个问题,我使用了RecyclerView.smoothScrollToPosition
<android.support.v7.widget.RecyclerView
android:id="@+id/recordItemList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:clipToPadding="false"
android:scrollbars="none"
app:layoutManager="LinearLayoutManager"
app:stackFromEnd="true"
app:reverseLayout="true"/>
然后在添加新项目时调用smoothScrollToPosition
int newIndex = myArraylist.size();
myArraylist.add(newItem);
notifyItemInserted(newIndex)
myRecyclerView.smoothScrollToPosition(newIndex);
Collections.reverse(myArraylist);
就在设置适配器之前。
并致电smoothScrollToPosition
。这次,newIndex为0
int newIndex = 0
myArraylist.add(newIndex,newItem);
notifyItemInserted(newIndex)
myRecyclerView.smoothScrollToPosition(newIndex);