我有一个用于 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/