2015-11-20 78 views
-1

我的RecyclerView包含单选按钮。当我点击一个我的下面的实现应该取消选择所有其他(notifyDataSetChanged()应重新绑定所有行)。出人意料的是,onClick永远不会触发:OnClick在RecyclerView适配器中未触发

public class NameAdapter extends RecyclerView.Adapter<NameAdapter.NameHolder> { 

    private List<String> myNames; 
    private int selectedPosition = -1; 

    public NameAdapter(List<String> names) { 
     myNames = names; 
    } 

    @Override public NameHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     Context context = parent.getContext(); 
     View view = LayoutInflater.from(context).inflate(R.layout.name_item, parent, false); 
     return new NameHolder(view); 
    } 

    @Override public void onBindViewHolder(NameHolder holder, int position) { 
     String name = myNames.get(position); 
     holder.name.setText(name); 
     holder.radioButton.setChecked(position == selectedPosition); 
    } 

    @Override public int getItemCount() { 
     return myNames.size(); 
    } 

    public class NameHolder extends RecyclerView.ViewHolder { 

     private TextView name; 
     private RadioButton radioButton; 

     public NameHolder(View itemView) { 
      super(itemView); 
      name = (TextView) itemView.findViewById(R.id.name); 
      radioButton = (RadioButton) itemView.findViewById(R.id.radio_button); 
      View.OnClickListener clickListener = new View.OnClickListener() { 
       @Override public void onClick(View v) { 
        selectedPosition = getAdapterPosition(); 
        notifyDataSetChanged(); 
       } 
      }; 
      itemView.setOnClickListener(clickListener); 
     } 
    } 
} 
+0

我可以尝试http://stackoverflow.com/questions/24471109/recyclerview-onclick?rq=1但我主要关心的是,为什么不设置对项目工作的听众? – user3148156

+0

你的代码似乎在我的模拟器中正常工作。然后再次,我不得不写我自己的活动,所以也许你的问题不是适配器类 – 0X0nosugar

回答

0

使用下列方法之一触发点击事件。

public class NameHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

    private TextView name; 
    private RadioButton radioButton; 

     public NameHolder(View itemView) { 
      super(itemView); 
      name = (TextView) itemView.findViewById(R.id.name); 
      radioButton = (RadioButton) itemView.findViewById(R.id.radio_button); 
      itemView.setOnClickListener(this); 
     } 
     @Override 
     public boolean onClick(View v) { 
      //Put your code here 
     } 
    } 
+1

我已经试过这个,它也没有工作;这只是我做到这一点的另一种方法。 – user3148156

+0

在xml视图中尝试setClickable =“true”。 –