如何在recyclerView中实现复选框?

Gya*_*thi 5 checkbox android android-recyclerview

我有一个用于 recyclerview 的适配器。我从我的活动传递数组列表的地方,比如数据是具有一些数据的 ArrayList。

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

    recyclerView.setAdapter(alternativeAdapter);
Run Code Online (Sandbox Code Playgroud)

在 AlternativeAdapter 类中,我有一个文本视图和复选框。我可以用复选框显示所有文本项。

在 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

当我使用

 holder.chkSelected.setChecked(currencyListArray.get(position).isSelected());
Run Code Online (Sandbox Code Playgroud)

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

请指导我。

Ank*_*dar 6

首先,您的currencyListArray 是字符串的arraylist,因此它不会返回“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.
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

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

 chkSelected.setChecked(position== selectedPosition);

        chkSelected.setOnCheckedChangeListener(new OnCheckedChangeListener() {

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