我一直在尝试找出如何检查 RecyclerView 中列表项中的复选框是否已选中。我在网上看到了一些文章,但我不明白它们的意思。如果有人能提供帮助,那就太好了。
有关我的应用的信息 这是它的作用的一小部分。这是一个联系人应用程序。它在一个屏幕上列出了用户的所有联系人。我没有为此使用联系人选择器。我将列表显示为回收器 View ,回收器 View 中的每个项目都有一个复选框。用户可以选中他们想要加注星标的联系人的复选框。当他们点击保存按钮时,他们检查的联系人将出现在他们的收藏夹页面上,即 MainActivity。
我现在需要了解如何查看是否在回收器 View 中检查了某个项目。
这是适配器的代码:
package krispo.callaid;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.util.SparseBooleanArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CheckedTextView;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
/**
* Created by po on 9/8/2018.
*/
public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.MyViewHolder> {
private List<Contact> contactsList;
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView name, number;
public CheckBox checkBox;
public MyViewHolder(View view) {
super(view);
name = (TextView) view.findViewById(R.id.name);
number = (TextView) view.findViewById(R.id.number);
checkBox = (CheckBox)view.findViewById(R.id.checkBox);
}
}
public ContactAdapter(List<Contact> contactsList) {
this.contactsList = contactsList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.contact_row, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Contact contact = contactsList.get(position);
holder.name.setText(contact.getName());
holder.number.setText(contact.getPhoneNumber());
}
@Override
public int getItemCount() {
return contactsList.size();
}
}
这是联系人对象的代码:
package krispo.callaid;
import android.preference.CheckBoxPreference;
public class Contact {
private String name, phoneNumber,ID;
private boolean added;
private int position;
public Contact(){
}
public Contact(String name, String phoneNumber,String ID, boolean added){
this.name = name;
this.phoneNumber = phoneNumber;
this.ID = ID;
this.added = added;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getPhoneNumber() {
return this.phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getID() {
return this.ID;
}
public void setID(String ID) {
this.ID = ID;
}
public boolean isAdded() {
return this.added;
}
public void setAdded(boolean added) {
this.added = added;
}
public int getPosition() {
return position;
}
public void setPosition(int position) {
this.position = position;
}
}
以下是每个项目行的代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:orientation="vertical"
android:paddingBottom="@dimen/row_padding_vertical"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/row_padding_vertical">
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toEndOf="@+id/checkBox"
android:layout_toRightOf="@+id/checkBox"
android:text="Test"
android:textColor="@android:color/black"
android:textSize="25sp"
android:textStyle="bold" />
<TextView
android:id="@+id/number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/name"
android:layout_toEndOf="@+id/checkBox"
android:layout_toRightOf="@+id/checkBox"
android:text="Test"
android:textColor="#7f8c8d"
android:textSize="20sp" />
<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_toRightOf="@+id/number"
android:layout_centerVertical="true" />
</RelativeLayout>
谢谢!我对此有点陌生,如果有点困惑,抱歉。
最佳答案
创建一个名为 checkedContacts
且类型为 Contact
的 ArrayList
,并在 onBindViewHolder
方法中设置一个检查监听器CheckBox
并从 checkedContacts
添加或删除联系人,如下所示:
holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (isChecked){
checkedContacts.add(contact);
} else {
checkedContacts.remove(contact);
}
}
});
关于Android:如何检查 RecyclerView 的项目中是否选中了复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51778606/