簡體   English   中英

OnClick 未在 RecyclerView 適配器中觸發

[英]OnClick not firing in RecyclerView adapter

我的RecyclerView包含單選按鈕。 當我單擊一個時,我的以下實現應取消選擇所有其他實現( notifyDataSetChanged()應重新綁定所有行)。 令人驚訝的是, onClick從未被觸發:

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);
        }
    }
}

使用以下方式之一觸發點擊事件。

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 
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM