Haga doble clic en OnClickListener de un adaptador de vista de reciclador
Estoy tratando de agregar una vista de clic simple a un elemento de una vista de reciclador, pero por alguna razón tengo que hacer clic en un elemento dos veces en lugar de una para realizar una acción. Con un solo clic, parece que la vista del reciclador no detecta un clic. En el siguiente, sin embargo, detecta el clic y realiza una acción adecuada.
XML:
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/cardView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<RelativeLayout
android:id="@+id/rlContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:background="@drawable/selector_inventory_recycler_item"
android:padding="16dp">
<ImageView
android:id="@+id/item_photo"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginRight="16dp"
/>
<TextView
android:id="@+id/txtItemName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/item_photo"
android:textSize="16sp"
/>
<TextView
android:id="@+id/txtItemQuantity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/txtItemName"
android:layout_toRightOf="@+id/item_photo"
/>
<TextView
android:id="@+id/txtItemPrice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/txtItemQuantity"
android:layout_toRightOf="@+id/item_photo"
/>
</RelativeLayout>
</android.support.v7.widget.CardView>
CÓDIGO:
public class InventoryItemRecyclerAdapter extends RecyclerView.Adapter<InventoryItemRecyclerAdapter.InventoryItemViewHolder> {
onItemClickListener mOnItemClickListener = null;
/**
*
*/
public ArrayList<Product> mInventoryItemList;
Context mContext;
static String TAG = "InventoryItemRecyclerAdapter";
Random random = new Random();
// -------------------------------------------------------------------------
// Constructor
/**
*
* @param pInventoryItemList
*/
public InventoryItemRecyclerAdapter(ArrayList<Product> pInventoryItemList) {
mInventoryItemList = pInventoryItemList;
}
// ---------------------------------------------------------------------
@Override
public InventoryItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
mContext = parent.getContext();
// Inflate the Layout for an item
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_inventory_recycler_adapter, parent, false);
// Instantiate ViewHolder
InventoryItemViewHolder inventoryItemViewHolder = new InventoryItemViewHolder(v);
return inventoryItemViewHolder;
}
@Override
public void onBindViewHolder(InventoryItemViewHolder holder, int position) {
...
}
// ---------------------------------------------------------------------------------------------
/**
* Returns the total number of items in the data set hold by the adapter.
*
* @return The total number of items in this adapter.
*/
@Override
public int getItemCount() {
return mInventoryItemList.size();
}
// ---------------------------------------------------------------------------------------------
// View Holder
/**
* RecyclerView
*/
public class InventoryItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
// -----------------------------------------------------------------------------------------
// Vars
public CardView cardView;
public RelativeLayout uiContainer;
public TextView productName;
public TextView productPrice;
public TextView productQuantity;
public ImageView productImage;
public Product mProduct;
// -----------------------------------------------------------------------------------------
// Constructor
public InventoryItemViewHolder(View itemView) {
super(itemView);
cardView = (CardView) itemView.findViewById(R.id.cardView);
productName = (TextView) itemView.findViewById(R.id.txtItemName);
productImage = (ImageView) itemView.findViewById(R.id.item_photo);
productPrice = (TextView) itemView.findViewById(R.id.txtItemPrice);
productQuantity = (TextView) itemView.findViewById(R.id.txtItemQuantity);
uiContainer = (RelativeLayout) itemView.findViewById(R.id.rlContainer);
uiContainer.setOnClickListener(this);
}
// -----------------------------------------------------------------------------------------
/**
* Called when a view has been clicked.
*
* @param v The view that was clicked.
*/
@Override
public void onClick(View v) {
Log.e("InventoryItemRecyclerAdapter", "onItemClick");
// Throw a null pointer exception if this is null
if (mOnItemClickListener == null) {
throw new NullPointerException("mOnItemClickListener is null in InventoryItemRecyclerAdapter");
}
// Delegate to its caller. Let it handle the work
mOnItemClickListener.onRecyclerViewItemClick(this);
}
// -------------------------------------------------------------
}
// -----------------------------------------------------------------
/**
* Interface for RecyclerView
*/
public interface onItemClickListener {
/**
*
* @param pItemViewHolder
*/
public void onRecyclerViewItemClick(InventoryItemRecyclerAdapter.InventoryItemViewHolder pItemViewHolder);
}
}
Parece que no pude encontrar el problema que está causando este problema. ¿Puedo obtener ayuda en esto por favor? Gracias.