android - 如何使用java将选定的项目(我的recyclerview中的多个项目)值从适配器传递到android中的片段
问题描述
我的应用程序中有一个回收站视图列表。那里有选择和取消选择选项。选择项目后,我需要使用所选列表创建特定项目。
所以我在我的片段中添加了创建按钮,并在我的适配器 onBindViewHolder 中显示了选择和取消选择。
这里我需要将选中项的值发送到fragment,并且需要在fragment中设置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>
列表视图.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"
/>
解决方案
首先创建List来存储所有选中的消息
private final ArrayList<User> selected;
并在您的构造函数上初始化此数组。
然后在onBindViewHolder
添加此方法以保存选定或删除未选定
User message = (User) mModelList.get(position);
// rest of your code here
holder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
User message = (User) mModelList.get(position);
if (holder.checkBox.isChecked()){
selected.add(message );
}else{
selected.remove(message );
}
}
});
然后在您的适配器上创建此方法以从片段中访问它:
public ArrayList<User> getSelected() {
return selected;
}
在您的片段上,您可以在单击按钮时获得选定的列表:
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ArrayList<User> selectedList=adapter.getSelected();
}
});
编辑
您还可以在 User 类中添加一个名为 isSelected 的布尔值,如下所示:
public class User {
// your variable
boolean isSelected;
/*
rest of setter and getter
*/
public boolean isSelected() {
return isSelected;
}
public void setSelected(boolean selected) {
isSelected = 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;
}
推荐阅读
- python - Cygwin上的Python3.6无法安装模块
- performance - 将函数应用于MATLAB中给定大小的每个子矩阵的有效方法
- python - AWS Lambda HTTP 内容长度超过 10485760 字节的 Flask
- javascript - 用 Javascript 格式化 DateTime
- python - django 使用 Integerfield 进行排序
- php - 如何按特定键对嵌套数组进行排序
- c++ - 如何在文档中查找某些关键字并将其读入程序(C++)
- c - GCC 如何理解复杂的算术?
- node.js - 如何删除名为“...”的文件夹
- reactjs - 转换打字稿反应计算器按钮组件