Android:如何检查 RecyclerView 的项目中是否选中了复选框

标签 android android-recyclerview

我一直在尝试找出如何检查 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 且类型为 ContactArrayList,并在 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/

相关文章:

android - 将 @Path 和 @Url 参数与 retrofit2 一起使用

android - 再次选择当前选定项目时,如何在 Android Spinner 中获取事件?

android - 更改数据库中的数据后刷新 fragment

android - 在 recyclerview fragment 中实现上下文操作模式的问题

android - 在 Android 中收到的第二个最近的彩信而不是最近的彩信

java - android 获取并解析 Google Directions

android - Ruboto:不会检测到 Android SDK 平台工具

java - 如何在android/java中使用recyclerview和picasso显示图像?

java - Android AsyncTask 中的 ArrayList

android - 如何在 recyclerview 的 viewholder 中创建动态项目行?