RecyclerView里面的内容搞砸了

时间:2017-03-09 21:04:36

标签: android

我在使用RecyclerView时遇到了一些非常奇怪的行为,并且它关于在一行RecyclerView中锚定和对齐视图。所以这里是行的结果应该是这样的:

enter image description here

以下是两张显示最终结果的图片: enter image description here enter image description here

总是不会发生这种情况。有时候里面的视图会像上面附着的图像一样混乱,有时则不是。无论如何这里是我的xml文件,显示行布局的外观:

    <?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <RelativeLayout android:id="@+id/background"
                    xmlns:android="http://schemas.android.com/apk/res/android"
                    xmlns:app="http://schemas.android.com/apk/res-auto"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

        <de.hdodenhof.circleimageview.CircleImageView
            android:layout_margin="24dp"
            android:id="@+id/iv_user_icon"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:src="@drawable/ic_zelena_bez_lopte"
            app:civ_border="true"
            app:civ_border_color="@color/colorAccent"
            app:civ_border_width="1dp"
            app:civ_shadow="true"
            app:civ_shadow_color="@android:color/black"
            app:civ_shadow_radius="10"/>

        <LinearLayout
            android:id="@+id/username_container"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/iv_user_icon"
            android:layout_alignTop="@+id/iv_user_icon"
            android:layout_marginLeft="20dp"
            android:layout_marginStart="20dp"
            android:layout_toEndOf="@+id/iv_user_icon"
            android:layout_toRightOf="@+id/iv_user_icon"
            android:gravity="center|start"
            android:orientation="vertical">

            <TextView
                android:id="@+id/tv_username"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Mr.Bean"
                android:textColor="@android:color/white"
                android:textSize="12sp"
                android:typeface="sans"/>

            <TextView
                android:id="@+id/tv_city_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:textColor="@color/colorAccent"
                android:textSize="12sp"
                android:typeface="sans"/>
        </LinearLayout>

        <ImageView
            android:id="@+id/iv_option"
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:layout_alignBottom="@+id/iv_user_icon"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_alignTop="@+id/iv_user_icon"
            android:layout_marginEnd="20dp"
            android:layout_marginRight="20dp"
            android:background="@null"
            android:src="@drawable/ic_message"/>

        <View
            android:id="@+id/lst_item_divider"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_alignLeft="@+id/username_container"
            android:layout_alignStart="@+id/username_container"
            android:layout_below="@+id/username_container"
            android:background="@color/main_text_color"/>
    </RelativeLayout>

    <ImageView
        android:visibility="visible"
        app:layout_anchor="@+id/iv_user_icon"
        app:layout_anchorGravity="bottom|center|end|right"
        android:src="@drawable/icon"
        android:id="@+id/iv_star"
        android:layout_width="30dp"
        android:layout_height="30dp"/>

</android.support.design.widget.CoordinatorLayout>

我需要时在适配器内部隐藏视图,也许这是一个问题,我真的不知道。在检查适配器中的某些条件时,我尝试过不隐藏视图,但结果相同。只是为了解释一下,我隐藏了收件箱图标,因为如果我的用户名显示在列表中我想隐藏它,因为我不想发送自己的消息,而且这个徽章图标只会显示给一个用户。

以下是适配器的代码:

@Override
public void onBindViewHolder(final TeamMembersListAdapter.HeaderViewHolder holder, int position) {
    final User user = teamUsers.get(position);

    Glide.with(mContext)
            .load(Uri.parse(user.getImage()))
            .diskCacheStrategy(DiskCacheStrategy.SOURCE)
            .placeholder(R.drawable.ic_zelena_bez_lopte)
            .error(R.drawable.ic_zelena_bez_lopte)
            .dontAnimate()
            .into(holder.profileImage);

    String selfUserId = AppController.getInstance().getDatabase().getUserDetails().get("user_id");

    if (user.getCreatorId() == Integer.parseInt(user.getId())) {
        holder.ivBadge.setVisibility(View.VISIBLE);
    } else {
        holder.ivBadge.setVisibility(View.INVISIBLE);
    }

    if (selfUserId.equals(user.getId())) {
        holder.ivSendMessage.setVisibility(View.INVISIBLE);
    } else {
        holder.ivSendMessage.setVisibility(View.VISIBLE);
    }

    holder.tvUsername.setText(user.getName());
    holder.tvCityName.setText(user.getCity());

    holder.bgContainer.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mOnItemClickListener.onItemClickListener(holder.getAdapterPosition());
        }
    });
}

1 个答案:

答案 0 :(得分:1)

不应该在RelativeLayout中将所有视图放在一起吗? 我不明白为什么你甚至需要CoordinatorLayout,也许试图摆脱Coordinator并将所有内部包裹起来。

我建议也尝试使用ConstraintLayout - 在这种布局中应该很容易做到这一点。

在这里,检查一下 https://developer.android.com/training/constraint-layout/index.html#add-constraintlayout-to-your-project