gpt4 book ai didi

android - recyclerview 中项目之间的差距在列表动态和重复更新时增加 android

转载 作者:行者123 更新时间:2023-11-29 19:15:03 26 4
gpt4 key购买 nike

我正在显示来自带有 recyclerview 的服务器的列表,请求在特定时间后执行更新列表,如果有新项目,它将被添加到列表中,但在每次请求执行后,recyclerview 中的项目之间的差距变大。 enter image description here

enter image description here

我的用于显示 recyclerview 的 xml 代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/content_notification_list_show"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.systechdigital.webadeal.NotificationListShowActivity"
tools:showIn="@layout/activity_notification_list_show"
android:orientation="vertical"

>

<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/recyclerViewId"
android:background="#c2bfbf"
android:paddingLeft="5dp"
android:paddingRight="5dp"

android:adjustViewBounds="true"
>
</android.support.v7.widget.RecyclerView>


<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/emptyViewTvId"
android:text="There is no notification"

android:textSize="23sp"
android:gravity="center"
/>

</LinearLayout>

recyclerview适配器代码:

<?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="horizontal"
android:weightSum="2"
>

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="2.2"
android:layout_marginRight="5dp"
>
<ImageView
android:layout_width="60dp"
android:layout_height="60dp"
android:id="@+id/image_notificatoinListShowId"
android:layout_margin="5dp"
/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/proNameTvId"
android:layout_toEndOf="@+id/image_notificatoinListShowId"
android:layout_marginLeft="10dp"
android:textColor="#000000"
android:layout_marginTop="5dp"
/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/notificationMsgTvId"
android:layout_toEndOf="@+id/proNameTvId"
android:layout_marginLeft="7dp"
android:textColor="#000000"
android:layout_marginTop="5dp"
/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/notificationTimeTvId"
android:layout_below="@+id/notificationMsgTvId"
android:layout_marginLeft="10dp"
android:textColor="#000000"
android:layout_marginTop="7dp"
android:layout_toEndOf="@id/image_notificatoinListShowId"
android:layout_marginBottom="5dp"
/>

</RelativeLayout>

<Button
android:layout_width="15dp"
android:layout_height="15dp"
android:id="@+id/circleButtonId"
android:background="@drawable/circle_notification"
android:layout_gravity="center"
android:layout_marginRight="5dp"
/>

</LinearLayout>

适配器java代码:

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {

NotificationClass notificationClass=notificationClassArrayList.get(position);

Picasso.with(context).load(notificationClass.getProfile_pic_id()).transform(new CircleTransform()).into(holder.image_notificatoinListShow);
holder.proNameTv.setText(notificationClass.getFirst_name()+" "+ notificationClass.getLast_name());
holder.notificationMsgTvId.setText(notificationClass.getActionText());
if(notificationClass.getIsViewed().contains("0")){
holder.circleButton.setVisibility(View.VISIBLE);
}else {
holder.circleButton.setVisibility(View.INVISIBLE);
}
Timestamp timestamp = new Timestamp(Long.valueOf(notificationClass.getLastModify())*1000);
holder.notificationTimeTvId.setText(timestamp.toString());


}

列表显示 java 代码 Activity :

 notificationListShowAdapter = new NotificationListShowAdapter(recyclerView.getContext(), list);

LinearLayoutManager layoutManager = new LinearLayoutManager(contextNotificationActivity);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(notificationListShowAdapter);

DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(contextNotificationActivity,
layoutManager.getOrientation());
recyclerView.addItemDecoration(dividerItemDecoration);
notificationListShowAdapter.notifyDataSetChanged();

最佳答案

  1. 我建议为 notificationMsgTvId 提供固定高度,然后再次运行代码。列表元素中的 wrap_content 有时很痛苦。

  2. 您能否也尝试为 notificationMsgTvId 提供一种颜色作为背景,并检查是否是正在变大的 View ?

  3. 此外,我建议在布局末尾添加一个灰色背景的 View 作为分隔符,而不是使用 DividerItemDecoration :)

尝试这些步骤,如果问题仍然存在,请告诉我。大多数时候,这应该可以解决上述问题。

干杯!

关于android - recyclerview 中项目之间的差距在列表动态和重复更新时增加 android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43829949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com