RecyclerView ?android:attr/selectableItemBackground ne fonctionne pas sur les articles

J'ai ce items.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:focusable="true"
android:clickable="true"
android:background="?android:attr/selectableItemBackground"
android:layout_height="wrap_content">

<ImageView
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:id="@+id/colorPreview" />


<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:textAppearance="@android:style/TextAppearance.Large"
    android:textColor="@android:color/white"
    android:id="@+id/colorName" />

</RelativeLayout>

Quand je les utiliser séparément, le selectableItemBackground anime lorsque je clique sur la vue. Mais quand je l'utilise pour les éléments dans un RecyclerView, l'effet sur le clic ne se reproduira plus. Comment puis-je résoudre ce problème?

PS: c'est le port d'écoute sur le RecyclerView, si elle est pertinente:

 public ColorListOnItemTouchListener(Context context, OnItemClickListener clickListener) {
    mClickListener = clickListener;
    mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
        @Override
        public boolean onDown(MotionEvent e) {
            return true;
        }

        @Override
        public void onLongPress(MotionEvent e) {
                if(childView != null && mClickListener != null) {
                    mClickListener.onItemLongPress(childView, index);
                }
        }

        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            if(childView != null && mClickListener != null) {
                mClickListener.onItemClick(childView, index);
            }
            return true;
        }

        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            return false;
        }
    });
}

Merci!

Edit:

 public class ColorsCursorAdapter extends RecyclerView.Adapter<ColorsCursorAdapter.ViewHolder> {
private static final int layout = R.layout.color_item;
private Cursor mCursor;
public ColorsCursorAdapter(Cursor c) {
super();
this.mCursor = c;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(layout, parent, false);
TextView name = (TextView) v.findViewById(R.id.colorName);
ImageView image = (ImageView) v.findViewById(R.id.colorPreview);
return new ViewHolder(v, name, image);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
mCursor.moveToPosition(position);
int color = mCursor.getInt(mCursor.getColumnIndex(ColorItem.COLUMN_COLOR));
holder.colorName.setText(Utils.getColorString(color));
holder.colorPreview.setImageDrawable(new ColorDrawable(color));
}
@Override
public int getItemCount() {
if(mCursor != null) {
return mCursor.getCount();
}
return 0;
}
public void swapCursor(Cursor c) {
mCursor = c;
notifyDataSetChanged();
}
public Cursor getCursor() {
return mCursor;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView colorName;
public ImageView colorPreview;
public ViewHolder(View root, TextView colorName, ImageView colorPreview) {
super(root);
root.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//
}
});
this.colorName = colorName;
this.colorPreview = colorPreview;
}
}
}

Et l'adaptateur est créé avec:

colorList.setLayoutManager(new LinearLayoutManager(this));
adapter = new ColorsCursorAdapter(null);
colorList.setAdapter(adapter);
  • Avez-vous essayé de réglage onClick écoute sur le holderView adaptateur?
  • Je l'ai fait... et il ne fonctionne pas
  • mais avez-vous mis en écoute sur un point de vue qui a selectablebackground ensemble?
  • Il fonctionne très bien pour moi (voir cet exemple de projet).
  • oui, j'ai été la mise à l'auditeur sur l'élément racine de l'élément qui a le fond (RelativeLayout)
  • code postal façon dont vous créez votre recycleur et adaptateur
  • ajouté un peu plus de code
  • Un autre chose. Remplacer "?android:attr/selectableItemBackground" avec "?attr/selectableItemBackground"
  • essayé ... toujours pas de chance
  • Essayez de changer de thème.
  • Essayé, mais pas de l'utiliser
  • Je suis coincé avec la même question. Il fonctionne même dans les autres cartes, mais pas sur une en particulier. Peut pas comprendre ce qui provoque cette. Si j'arrive à le résoudre en quelque sorte, vous avertira 🙂

InformationsquelleAutor Matei Suica | 2015-06-24