android - 如何在recyclerView 中实现复选框?

标签 android checkbox android-recyclerview

我有一个用于 recyclerview 的适配器。我从 Activity 中传递数组列表的地方,例如 data 是包含一些数据的 ArrayList。

 AlternativeAdapter alternativeAdapter= new AlternativeAdapter(AlternativeActivity.this, data);

    recyclerView.setAdapter(alternativeAdapter);

在 AlternativeAdapter 类中,我有一个 TextView 和复选框。我能够显示所有带有复选框的文本项。

在 AlternativeAdapter 类中

public class AlternativeCurrencyAdapter extends RecyclerView.Adapter<AlternativeCurrencyAdapter.ViewHolder>{

 ArrayList<String> currencyListArray;
    Context context;
    View view1;
    ViewHolder viewHolder1;
    TextView textView;
    private int selectedPosition = -1;// no selection by default
    public AlternativeCurrencyAdapter(Context context1, ArrayList<String> currencyListArray){

        this.currencyListArray = currencyListArray;
        context = context1;
    }    
    public  class ViewHolder extends RecyclerView.ViewHolder{

        public TextView username;
        public CheckBox chkSelected;
        public ViewHolder(View v){
            super(v);
            username = (TextView)v.findViewById(R.id.username);
            chkSelected = (CheckBox) v.findViewById(R.id.chkSelected);
            itemView.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v) {
                    // get position
                    int pos = getAdapterPosition();

                    // check if item still exists
                    if(pos != RecyclerView.NO_POSITION){
                        String clickedDataItem = currencyListArray.get(pos);
                        Toast.makeText(v.getContext(), "You clicked " + clickedDataItem, Toast.LENGTH_SHORT).show();

                    }
                }
            });

        }
    }

    @Override
    public AlternativeCurrencyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){

        view1 = LayoutInflater.from(context).inflate(R.layout.alternative_currency_adapter_list,parent,false);

        viewHolder1 = new ViewHolder(view1);

        return viewHolder1;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, final int position){

        holder.username.setText(currencyListArray.get(position));
    }
    @Override
    public int getItemCount(){
        return currencyListArray.size();
    }
}

通过这种方式显示数组列表的项目,但我的需要是项目应该显示在左角,每个项目的复选框应该显示在右角。当有人点击复选框时, toast 消息应该会出现,就像您选择了 XYZ 项目一样。并且只需要单选,不需要多选。

当我使用

 holder.chkSelected.setChecked(currencyListArray.get(position).isSelected());

我显示编译时错误。无法解析 isSelected()

请指导我。

最佳答案

首先,您的 currencyListArray 是字符串数组列表,因此它不会返回“isSelected()”,抱歉!

现在满足您的要求,您需要在选中任何复选框时显示消息。

所以代码如下:

   @Override
public void onBindViewHolder(ViewHolder holder, final int position){

    holder.username.setText(currencyListArray.get(position));
    holder.chkSelected.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            //do your toast programming here.
        }
    });
}

现在来谈谈您的第二个要求,一次只选择一个项目:这是该项目的代码::

 chkSelected.setChecked(position== selectedPosition);

        chkSelected.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked)
                {
                    selectedPosition =  position;
                }
                else{
                     selectedPosition = -1;
                }
                notifyDataSetChanged();
            }
        });

关于android - 如何在recyclerView 中实现复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47512959/

相关文章:

android - 一次包含多个项目的水平回收器 View

php - 使用 AJAX 将复选框值(如果未选中则为 0)传递给 PHP

jsf-2 - 复选框数据表 primefaces 不起作用

android - Recycler View 正在加载错误的数据或从错误的位置加载数据

android - 我应该使用哪些 RelativeLayout 属性?

Java - 选择复选框时的错误操作

java - android - RecyclerView 中的单个 RadioButton

android - Scrollable ImageView Android 问题(过度滚动)

java - 应用程序内空指针异常

android - 动态更改弹出菜单项的字体大小 Android