我有一个用于recyclerview的适配器。我从我的活动中传递数组列表,例如 data 是具有一些数据的arraylist。
AlternativeAdapter alternativeAdapter= new AlternativeAdapter(AlternativeActivity.this, data);
recyclerView.setAdapter(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();
}
}
这样,数组列表的项目正在显示,但我的需求应在左角显示,每个项目的复选框应在右角显示。当您在复选框上单击一些单击时,应该像您选择的XYZ项目一样出现吐司消息。只需要单个选择,而不是多选择。
当我使用
时 holder.chkSelected.setChecked(currencyListArray.get(position).isSelected());
i显示编译时间错误。无法解析 ISSELECTED()
请指导我。
第一件事,您的crurnersListArray是字符串的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.
}
});
}
现在要提出您的第二个要求,一次仅选择一个项目:以下是代码::
chkSelected.setChecked(position== selectedPosition);
chkSelected.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked)
{
selectedPosition = position;
}
else{
selectedPosition = -1;
}
notifyDataSetChanged();
}
});
工作示例
class ApplicationsAdapter(val userList: ArrayList<DataX>, var callBack: AdapterCallback) :
RecyclerView.Adapter<ApplicationsAdapter.ViewHolder>() {
interface AdapterCallback {
fun onAppLockedUnlocked(position: Int, status: Boolean)
}
//this method is returning the view for each item in the list
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): ViewHolder {
val v =
LayoutInflater.from(parent.context).inflate(R.layout.item_view_app_list, parent, false)
return ViewHolder(v)
}
//this method is binding the data on the list
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bindItems(userList[position], callBack)
}
//this method is giving the size of the list
override fun getItemCount(): Int {
return userList.size
}
//the class is hodling the list view
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bindItems(
dataX: DataX,
callBack: AdapterCallback
) {
val tvAppName = itemView.findViewById(R.id.tvAppName) as TextView
val checkboxLockUnlock = itemView.findViewById(R.id.checkboxLockUnlock) as CheckBox
tvAppName.text = dataX.appName
// set listener null here
checkboxLockUnlock.setOnCheckedChangeListener(null)
if (dataX.isLocked) {
checkboxLockUnlock.isChecked = true
} else {
checkboxLockUnlock.isChecked = false
}
// initialize listener after checkbox state changed
checkboxLockUnlock.setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener { buttonView, isChecked ->
if (isChecked) {
callBack.onAppLockedUnlocked(adapterPosition, true)
} else {
callBack.onAppLockedUnlocked(adapterPosition, false)
}
}
)
}
}
}