在 RecyclerView 中使用 If,不显示列表的所有项目
Using If in RecyclerView, doesnt show all the item of the list
我正在尝试为我的聊天应用程序创建一个 RecycleView,并将已发送和到达的消息左右对齐。我使用 if 状态来检查它是否来自我,并且 2 个单独的文本视图与 start/end 对齐并且只显示正确的文本视图。我认为这不是最好的解决方案,因为有时在通知有关新数据的视图后,RecycleView 不会显示所有项目。如果我只是在没有任何 if/gone 等的情况下使用它,列表会显示正确的项目数。
if (chats.get(position).isFromMe() > 0) {
holder.txtTextFrMe.setText(chats.get(position).getMessage());
holder.txtTimeOut.setText(timeForm);
holder.relIn.setVisibility(View.GONE);
} else {
holder.txtText.setText(chats.get(position).getMessage());
holder.txtTimeIn.setText(timeForm);
holder.relOut.setVisibility(View.GONE);
}
和 xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="5dp">
<RelativeLayout
android:id="@+id/chatRelIn"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:id="@+id/chatText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:background="@drawable/shape_bg_incoming_bubble"
android:paddingVertical="10dp"
android:paddingLeft="30dp"
android:text="This is a message to me"
android:paddingRight="10dp"
android:textSize="17sp" />
<TextView
android:id="@+id/chatTextTimeIn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="10.21"
android:layout_alignBottom="@id/chatText"
android:layout_marginRight="10dp"
android:layout_alignParentEnd="true"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/chatRelOut"
android:layout_marginTop="15dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:gravity="right">
<TextView
android:id="@+id/chatTextFrMe"
android:paddingLeft="10dp"
android:paddingVertical="10dp"
android:paddingRight="30dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/shape_bg_outgoing_bubble"
android:textSize="17sp"
android:layout_alignParentEnd="true"
android:text="Message from me"
/>
<TextView
android:id="@+id/chatTextTimeOut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="10.21"
android:layout_alignBottom="@id/chatTextFrMe"
android:layout_alignParentStart="true"
android:layout_marginRight="10dp"
/>
</RelativeLayout>
</LinearLayout>
提前致谢!
这主要是因为recyclerview 小部件实际上与缓存一起工作。这就是为什么您应该对用户将看到的内容重复相同的过程,例如 GONE 或 VISIBLE。
if (chats.get(position).isFromMe() > 0) {
holder.txtTextFrMe.setText(chats.get(position).getMessage());
holder.txtTimeOut.setText(timeForm);
holder.relIn.setVisibility(View.GONE);
holder.relOut.setVisibility(View.VISIBLE);
} else {
holder.txtText.setText(chats.get(position).getMessage());
holder.txtTimeIn.setText(timeForm);
holder.relIn.setVisibility(View.VISIBLE);
holder.relOut.setVisibility(View.GONE);
}
我正在尝试为我的聊天应用程序创建一个 RecycleView,并将已发送和到达的消息左右对齐。我使用 if 状态来检查它是否来自我,并且 2 个单独的文本视图与 start/end 对齐并且只显示正确的文本视图。我认为这不是最好的解决方案,因为有时在通知有关新数据的视图后,RecycleView 不会显示所有项目。如果我只是在没有任何 if/gone 等的情况下使用它,列表会显示正确的项目数。
if (chats.get(position).isFromMe() > 0) {
holder.txtTextFrMe.setText(chats.get(position).getMessage());
holder.txtTimeOut.setText(timeForm);
holder.relIn.setVisibility(View.GONE);
} else {
holder.txtText.setText(chats.get(position).getMessage());
holder.txtTimeIn.setText(timeForm);
holder.relOut.setVisibility(View.GONE);
}
和 xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="5dp">
<RelativeLayout
android:id="@+id/chatRelIn"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:id="@+id/chatText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:background="@drawable/shape_bg_incoming_bubble"
android:paddingVertical="10dp"
android:paddingLeft="30dp"
android:text="This is a message to me"
android:paddingRight="10dp"
android:textSize="17sp" />
<TextView
android:id="@+id/chatTextTimeIn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="10.21"
android:layout_alignBottom="@id/chatText"
android:layout_marginRight="10dp"
android:layout_alignParentEnd="true"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/chatRelOut"
android:layout_marginTop="15dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:gravity="right">
<TextView
android:id="@+id/chatTextFrMe"
android:paddingLeft="10dp"
android:paddingVertical="10dp"
android:paddingRight="30dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/shape_bg_outgoing_bubble"
android:textSize="17sp"
android:layout_alignParentEnd="true"
android:text="Message from me"
/>
<TextView
android:id="@+id/chatTextTimeOut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="10.21"
android:layout_alignBottom="@id/chatTextFrMe"
android:layout_alignParentStart="true"
android:layout_marginRight="10dp"
/>
</RelativeLayout>
</LinearLayout>
提前致谢!
这主要是因为recyclerview 小部件实际上与缓存一起工作。这就是为什么您应该对用户将看到的内容重复相同的过程,例如 GONE 或 VISIBLE。
if (chats.get(position).isFromMe() > 0) {
holder.txtTextFrMe.setText(chats.get(position).getMessage());
holder.txtTimeOut.setText(timeForm);
holder.relIn.setVisibility(View.GONE);
holder.relOut.setVisibility(View.VISIBLE);
} else {
holder.txtText.setText(chats.get(position).getMessage());
holder.txtTimeIn.setText(timeForm);
holder.relIn.setVisibility(View.VISIBLE);
holder.relOut.setVisibility(View.GONE);
}