如何使用java将所选项目(my recyclerview中的多个项目)值从适配器传递到android中的片段

如何使用java将所选项目(my recyclerview中的多个项目)值从适配器传递到android中的片段,android,android-recyclerview,android-adapter,Android,Android Recyclerview,Android Adapter,我的应用程序中有一个回收者视图列表。在那里它有选择和取消选择选项。选择项目后,我需要使用所选列表创建特定项目 因此,我在片段中添加了创建按钮,并在适配器onBindViewHolder中显示了选择和取消选择 在这里,我需要将所选项目的值发送到片段,并需要在片段中设置post调用 我的片段: mRecyclerView.setHasFixedSize(true); mRecyclerView.setAdapter(mAdapter); mcreatevendorlist.setO

我的应用程序中有一个回收者视图列表。在那里它有选择和取消选择选项。选择项目后,我需要使用所选列表创建特定项目

因此,我在片段中添加了创建按钮,并在适配器onBindViewHolder中显示了选择和取消选择

在这里,我需要将所选项目的值发送到片段,并需要在片段中设置post调用

我的片段:

mRecyclerView.setHasFixedSize(true);
mRecyclerView.setAdapter(mAdapter);

        mcreatevendorlist.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                execute(new InitiationRequest("FINTesting", mcreate.getName()), mCreateInitiationListener);
                mAdapter.setOnItemClickListner(new MembersAdapter.onItemClickListner() {
                    @Override
                    public void onClick(User str) {

                    }
                });
            }
        }); 
我的适配器:

  MembersAdapter.onItemClickListner onItemClickListner;
    
     public void setOnItemClickListner(MembersAdapter.onItemClickListner onItemClickListner) {
            this.onItemClickListner = onItemClickListner;
        }
    
        public interface onItemClickListner{
            void onClick(User str);//pass your object types.
        }
    @Override
        public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
            User message = (User) mModelList.get(position);
    
    holder.select_Add.setOnClickListener(new View.OnClickListener() {
                @SuppressLint("ResourceAsColor")
                @Override
                public void onClick(View view) {
                    message.setSelected(!message.isSelected());
                   holder.select_Add.setText(message.isSelected() ? "ADDED" : "Add");
                }
            });
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    onItemClickListner.onClick(message);
                }
            });
    }
我的主XML:

 <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
 <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/create_vendorlist"
        android:text="Create Vendor"
        android:textColor="@color/black"
        android:background="@drawable/background"
        android:layout_gravity="center"
        android:padding="15dp"
        android:layout_margin="15dp"
        android:textSize="15sp"
        android:fontFamily="@font/cachet_std_medium"
        >
     <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/recycler_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@null"/>
    </LinearLayout>

Listview.xml:

       <TextView
            android:id="@+id/tv_username"
            style="@style/Username"
            android:layout_alignParentLeft="@+id/myCardView"
            android:paddingTop="@dimen/spacing_d2"
            tools:text="UserName"/>
        <CheckBox
            android:id="@+id/tv_add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="onCheckboxClicked"
            android:buttonTint="@color/white"
            android:gravity="center"
            />

首先创建列表以存储所有选定的邮件

private final ArrayList<User> selected;
然后在适配器上创建此方法以从片段访问它:

 public ArrayList<User> getSelected() {
        return selected;
    }
在您的
onBindViewHolder
复选框中添加一个侦听器,如下所示:

  public void onBindViewHolder(@NonNull UserHolder holder, int position) {

        /*
        rest of your code
         */
        holder.checkBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                user.setSelected(holder.checkBox.isChecked());
            }
        });
    }
要获取列表,请在适配器中添加此方法:

public ArrayList<User> getSelected() {
    ArrayList<User> selected = new ArrayList<>();
    for (User u : modelList) {
        if (u.isSelected) {
            selected.add(u);
        }
    }
    return selected;
}
public ArrayList getSelected(){
选定的ArrayList=新建ArrayList();
用于(用户u:模型列表){
如果(美国当选){
选中。添加(u);
}
}
返回选中的;
}

怎么了?您需要将所选项目的列表从适配器发送到片段吗?为什么不从您的界面发送列表呢
onClick(list str)
Yes我需要将所选项目从适配器发送到片段。你能给我一些样品吗。我正在适配器中选择一些项目,然后需要将所选项目发送到片段?您希望在哪个事件上获取此所选列表您的片段上有按钮还是其他什么?我的片段(my mainxml)上有按钮。但是列表(listview有复选框)是在适配器onbindviewholder中选中的。我正在获取java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.Object java.util.ArrayList.get(int)”。注意:在我的模型中,对象中没有选定值,只有用户名、图像。那么,我如何设置所选的布尔值?您在哪一行选择了此错误?添加(消息);您是否初始化了所选列表?谢谢您的时间。我已经决定了。非常感谢你,亲爱的。
public class User {
    // your variable 
    boolean isSelected;

    
    /*
        rest of setter and getter 
     */
    public boolean isSelected() {
        return isSelected;
    }

    public void setSelected(boolean selected) {
        isSelected = selected;
    }
}
  public void onBindViewHolder(@NonNull UserHolder holder, int position) {

        /*
        rest of your code
         */
        holder.checkBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                user.setSelected(holder.checkBox.isChecked());
            }
        });
    }
public ArrayList<User> getSelected() {
    ArrayList<User> selected = new ArrayList<>();
    for (User u : modelList) {
        if (u.isSelected) {
            selected.add(u);
        }
    }
    return selected;
}