2016-10-05 5 views
0

私は、画像をGlideで動的に読み込むRecyclerViewで奇妙な問題に遭遇しています。競合状態のように見えると私は、このスレッドを見て、それは問題を解決しませんでした:それはスクリーンショットのように見え、赤い矢印は画像グリッチを示してどのようにRecyclerViewとGlideはレイアウトを混乱させます

Recyclerview Adapter and Glide - same image every 4-5 rowsここ

は、ユーザー名のテキストが常に存在していることがわかります。

enter image description here

コード自体がかなり単純になります

RVアダプタ:

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { 
    int viewType = getItemViewType(position); 
    bindSubscribersCell((SubscribersListViewHolder) viewHolder, position); 
} 

結合ビュー:

private void bindSubscribersCell(SubscribersListViewHolder holder, int position) { 
    SubscribersListRowTypeUser subscriberRow = (SubscribersListRowTypeUser) mItems.get(position); 
    String userFullName = SDKUserHelper.MakeFullName(subscriberRow.getUser()); 
    holder.getUsername().setText(userFullName); 
    holder.getUsername().setVisibility(View.VISIBLE); 

    CircleImageView userImageView = holder.getAvatarImage(); 
    Drawable defaultIcon = ContextCompat.getDrawable(
      userImageView.getContext(), 
      R.drawable.avatar_guest); 
    RecylerViewHelper.loadImageView(
      subscriberRow.getUser().getPhotoUrl(), 
      userImageView, 
      defaultIcon, 
      true); 
} 

同じ技術を用いて画像負荷ヘルパー説明します私が上記のスレッドで:

public static void loadImageView(
     String imageUrl, 
     ImageView imageView, 
     Drawable drawable, 
     boolean icon) { 
    Context context = imageView.getContext(); 
    if (imageUrl != null && !imageUrl.isEmpty()) { 
     if (icon) { 
      Glide.with(context).using(CloudinaryHelper.getUrlLoaderPresetPOIIcon(context)). 
        load(imageUrl). 
        centerCrop(). 
        crossFade(). 
        into(imageView); 
     } else { 
      Glide.with(context). 
        load(imageUrl). 
        crossFade(). 
        into(imageView); 
     } 
    } else { 
     Glide.clear(imageView); 
     imageView.setImageDrawable(drawable); 
    } 
} 

セルの内部レイアウト:

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical"> 

    <de.hdodenhof.circleimageview.CircleImageView 
     android:id="@+id/user_avatar" 
     android:layout_width="wrap_content" 
     android:layout_height="@dimen/splash_icon_height" 
     android:layout_centerVertical="true" 
     android:src="@drawable/avatar_guest" /> 

    <TextView 
     android:id="@+id/user_name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:layout_marginEnd="40dp" 
     android:layout_toEndOf="@+id/user_avatar" 
     android:ellipsize="end" 
     android:gravity="center" 
     android:visibility="gone" 
     android:maxLines="1" 
     android:text="" 
     android:textSize="14sp" /> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentEnd="true" 
     android:layout_centerVertical="true" 
     android:layout_marginEnd="20dp" 
     android:src="@drawable/arrow_forward_gray" /> 

</RelativeLayout> 

ラッパークラスレイアウトコントロールを取得する:

public class SubscribersListViewHolder extends RecyclerView.ViewHolder { 
    final private CircleImageView mAvatarImage; 
    final private TextView mUsername; 
    final private View mViewHolder; 

    public SubscribersListViewHolder(View itemView) { 
     super(itemView); 
     mViewHolder = itemView; 
     mUsername = (TextView) itemView.findViewById(R.id.user_name); 
     assert mUsername != null; 
     mAvatarImage = (CircleImageView) itemView.findViewById(R.id.user_avatar); 
     assert mAvatarImage != null; 
    } 

    public TextView getUsername() { return mUsername; } 
    public CircleImageView getAvatarImage() { return mAvatarImage; } 
    public View getViewHolder() { return mViewHolder; } 
} 

誰もが、私は本当に感謝し、競合状態を見つけることができます。

ありがとうございました!

答えて

0

アイコンの幅と高さを固定値に設定したので、 "wrap_content"の代わりに固定のdp(私の場合は49dp)を作成しました。言い換えれば:

android:layout_width="@dimen/splash_icon_height" 
android:layout_height="@dimen/splash_icon_height" 

をしかし、問題は今、なぜ次のようになります。

WRONG(競合状態)

android:layout_width="wrap_content" 
android:layout_height="@dimen/splash_icon_height" 

正しいですか?何も思いつきません。

関連する問題