首页 > 解决方案 > 如何将分隔线更新到 RecyclerView 中的正确位置?

问题描述

我写了以下布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/avatar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="15dp" />

    <TextView
        android:id="@+id/full_name"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_toRightOf="@id/avatar"
        android:layout_toEndOf="@id/avatar"
        android:textSize="20sp"
        android:textColor="@color/blackColor"
        android:layout_centerVertical="true" />

    <!-- Divider -->
    <View
        android:id="@+id/divider"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_below="@+id/avatar"
        android:layout_centerVertical="true"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp" />

</RelativeLayout>

这是 RecyclerView 的项目布局。基本上它创建以下布局:

[avatar] [name]
---------------------
[avatar] [name]
---------------------
[avatar] [name]

Java 代码:

public void onBindViewHolder(ViewHolder holder, int position) {
        // Code
        // Set avatar

        // Set name
        holder.fullname.setText((CharSequence) name);

        // Set visible/invisible divider
        if (position < getItemCount() - 1) {
            holder.viewDivider.setVisibility(View.VISIBLE);
        } else {
            holder.viewDivider.setVisibility(View.GONE);
        }
    }

问题是分隔线设置在每个块的顶部ImageViewTextView不是底部。我想我理解它为什么会发生 - 分隔线已经在那里,所以当我动态设置时ImageViewTextView分隔线没有被渲染到正确的位置。或者它可能与android:layout_centerVertical?我应该如何解决它?

此外,在设置我调用的适配器的活动中:

holder.users.setLayoutManager(new LinearLayoutManager(this.activity));

LinearLayoutManager当(项目的)布局是时我可以打电话RelativeLayout吗?

标签: javaandroidandroid-layout

解决方案


<!-- Divider -->
<View
    android:id="@+id/divider"
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:layout_below="@+id/avatar"
    android:layout_centerVertical="true"  <-- REMOVE THIS LINE :)
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp" />

推荐阅读