2017-03-09 56 views
0

我遇到了RecyclerView的一些非常奇怪的行爲,它是關於在一行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

應該不是所有的意見是一起RelativeLayout的內部? 我不明白爲什麼你甚至需要CoordinatorLayout,也許試着擺脫協調員並將所有內部包裹在Relative中。

我建議也嘗試ConstraintLayout - 它應該是非常容易做到這一點在這樣的佈局。

這裏,看看這個 https://developer.android.com/training/constraint-layout/index.html#add-constraintlayout-to-your-project

+0

你好Patryk,我需要CoordinatorLayout是因爲我需要在圓形圖像這個徽章圖標的右下角角度對準的原因,我發現了一個方法來做到這一點與CoordinatorLayout使用錨選項。 –

+0

這真是明智的答案,並幫助我。謝謝 –