Sto tentando di ricevere clic sugli articoli RecyclerView
per i quali sto utilizzando il meccanismo di callback. Ho creato l'interfaccia OnItemClickListener
e l'adattatore personalizzato interno, ho scritto la logica per rilevare il clic con l'aiuto di View.OnClickListener
. Ma ricevo una richiamata in myActivity dopo aver fatto doppio clic su un elemento nell'elenco. Non ho idea di cosa sta succedendo qui!RecyclerView singolo clic non funziona ma funziona quando si fa clic due volte
codice all'interno di attività:
mAdapter = new AppAdapter(this, mAppList, new OnItemClickListener() {
@Override
public void onItemClick(View v, int position) {
Toast.makeText(SelectAppActivity.this, "Hello", Toast.LENGTH_SHORT).show();
}
});
recyclerview.setAdapter(mAdapter);
Codice per l'interfaccia:
public interface OnItemClickListener {
void onItemClick(View v, int position);
}
Codice per Custom Adattatore:
public class AppAdapter extends RecyclerView.Adapter<AppAdapter.ItemViewHolder> {
List<App> mAppList;
List<App> mFilterAppList;
Activity context;
OnItemClickListener onItemClickListener;
public AppAdapter(Activity context, List<App> appList, OnItemClickListener onItemClickListener) {
super();
this.context = context;
this.mAppList = appList;
this.mFilterAppList = appList;
this.onItemClickListener = onItemClickListener;
}
@Override
public ItemViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_app_list, parent, false);
final ItemViewHolder viewHolder = new ItemViewHolder(view);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemClickListener.onItemClick(v,4);
}
});
return viewHolder;
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
final App app = mAppList.get(position);
holder.name.setText(app.getmName());
holder.icon.setImageDrawable(app.getmAppIcon());
}
@Override
public int getItemCount() {
return mAppList.size();
}
public void setFilter(List<App> appList) {
mAppList = new ArrayList<>();
mAppList.addAll(appList);
notifyDataSetChanged();
}
public static class ItemViewHolder extends RecyclerView.ViewHolder {
public TextView name;
public ImageView icon;
public ItemViewHolder(View view) {
super(view);
name = (TextView) itemView.findViewById(R.id.app_name);
icon = (ImageView) itemView.findViewById(R.id.app_icon);
}
}
}
'' onClick viene eseguito su solo click? –
scusate !! ma non ti ho preso – nlogn
intendo aggiungere un log nel metodo onClick di 'view.setOnClickListener' e controllare che stia chiamando ogni volta o solo doppio click –