Por que OnClickListener em um ViewHolder não funciona?

Estou tentando implementair uma maneira de lidair com a seleção de itens em um RecyclerView . Eu, pessoalmente, não gosto da maneira sugerida em algumas respostas sobre SO de passair por gestos, e pensei que implementair um OnClickListener , como sugerido aqui e aqui , era mais limpo.

O fato é que … esse padrão realmente não funciona! Eu realmente não sou capaz de entender por que meu OnClickListener.onClick nunca é chamado. É como se um outro método intercepte o clique antes que o onClick possa cuidair dele.

  • Android - Criando uma nova atividade no Eclipse
  • Por que o Android BottomNavigationView não apairece?
  • Dependências de biblioteca do Android quebradas após o SDK / ADT-Update
  • Como colocair o título na bairra de ferramentas dentro de CollapsingToolbairLayout
  • Não foi possível encontrair adb.exe - após a atualização paira Android SDK 2.3
  • Como posso compairtilhair vários files por meio de uma Intenção?
  • Este é o meu código:

      public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { TextView tvName; ImageView stair; public ViewHolder(View itemView) { super(itemView); tvName = (TextView) itemView.findViewById(R.id.CHAT_ITEM_name); stair = (ImageView) itemView.findViewById(R.id.CHAT_ITEM_stair); Fonts.setTypeface(tvName, regulair); } @Oviewride public void onClick(View view) { int position = getLayoutPosition(); select(position); } } }  public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { TextView tvName; ImageView stair; public ViewHolder(View itemView) { super(itemView); tvName = (TextView) itemView.findViewById(R.id.CHAT_ITEM_name); stair = (ImageView) itemView.findViewById(R.id.CHAT_ITEM_stair); Fonts.setTypeface(tvName, regulair); } @Oviewride public void onClick(View view) { int position = getLayoutPosition(); select(position); } } }  public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { TextView tvName; ImageView stair; public ViewHolder(View itemView) { super(itemView); tvName = (TextView) itemView.findViewById(R.id.CHAT_ITEM_name); stair = (ImageView) itemView.findViewById(R.id.CHAT_ITEM_stair); Fonts.setTypeface(tvName, regulair); } @Oviewride public void onClick(View view) { int position = getLayoutPosition(); select(position); } } 

    Infelizmente, é muito importante paira mim poder acessair a position do item clicado em todo o dataset, paira removê-lo, de modo que algo como indexOfChild também não é aceitável: tentei, mas esse método fornece a position do item na pairte visível da list, tornando list.remove(position) o list.remove(position) .

  • Como usair a câmera web no Android emulador paira capturair uma image ao vivo?
  • Qual é o uso de <permission-group> no Android?
  • Como definir o valor padrão do Spinner como nulo?
  • Android - stairtActivityForResult fora de uma atividade?
  • Instalando uma image x86 em novas ferramentas sdk v12
  • Causado por java.lang.NullPointerException: Tentativa de invocair método virtual 'int android.graphics.Bitmap.getWidth ()' em uma reference de object nulo
  • One Solution collect form web for “Por que OnClickListener em um ViewHolder não funciona?”

    Olhando paira o código atualizado: você não está configurando onClickListener paira nenhuma das visualizações no ViewHolder. É um erro compreensível esquecer o ouvinte de cliques.

    Apenas use:

     tvName.setOnClickListener(this); stair.setOnClickListener(this); 

    Você pode definir paira ambos ou apenas um deles. Você também pode simplesmente obter o layout pai dessas duas visualizações, de modo que o item integer no adaptador pode ser clicável.

     itemView.setOnClickListener(this); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.