Clique duas vezes em OnClickListener de um adaptador de exibição de reciclador
Estou tentando adicionar uma simples Click View a um item de uma visão de reciclador, mas, por algum motivo, preciso clicar em um item duas vezes em vez de uma vez para executar uma ação. Com um único clique, parece que o Recycler View não detecta um clique. No próximo, porém, ele detecta o clique e executa uma ação adequada.
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);
}
}
Não consegui encontrar o problema que está causando esse problema. Posso obter alguma ajuda sobre isso, por favor. Obrigado.