android - 在 recyclerview Android 中从 Spinner 获取所有选定的项目
问题描述
我在Recyclerview中使用了Spinner。我在 Mainactivity 中有一个按钮。当我单击该按钮时,我需要从 recyclerview 的每一行中获取所有选定的项目。getSelectedItem()方法将从微调器返回所选项目,但我认为它仅适用于单个项目。我认为不需要使用setOnItemSelectedListener。
我的代码是:
public class MainActivity extends AppCompatActivity {
RecyclerView recycler_view;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recycler_view=findViewById(R.id.recycler_view);
button = findViewById(R.id.button);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this);
recycler_view.setLayoutManager(mLayoutManager);
setAdapter();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
}
private void setAdapter( ) {
recycler_view.setVisibility(View.VISIBLE);
StudentsListAdapter studentsListAdapter = new StudentsListAdapter(this);
recycler_view.setAdapter(studentsListAdapter);
// runLayoutAnimation(recycler_view, mSelectedItem);
}
}
适配器:
public class StudentsListAdapter extends RecyclerView.Adapter<StudentsListAdapter.MyViewHolder> {
String[] list={"Microbiology","Pharmacology","Microbiology","Forensic Medicine"};
String[] studentsName={"Student1","Student2","Studen3","Student4"};
Context ctx;
private ArrayAdapter<String> dataAdapter;
public class MyViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.text_name)
TextView text_name;
@BindView(R.id.spinner1)
Spinner spinner1;
MyViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
public StudentsListAdapter(Context ctx ) {
this.ctx = ctx;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.student_list_item, parent, false);
return new MyViewHolder(itemView);
}
@SuppressLint("SetTextI18n")
@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, @SuppressLint("RecyclerView") final int position) {
holder.text_name.setText(studentsName[position]);
dataAdapter = new ArrayAdapter<String>(ctx, R.layout.spinner_item, list);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
holder.spinner1.setAdapter(dataAdapter);
Log.d("Holder ",""+ holder.spinner1.getSelectedItem());
}
@Override
public int getItemCount() {
return studentsName.length;
}
}
解决方案
我想您需要添加一个复选框才能知道选择了哪些项目。
Arraylist selectedStudent = new Arraylist();
@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, @SuppressLint("RecyclerView") final int position) {
holder.text_name.setText(studentsName[position]);
dataAdapter = new ArrayAdapter<String>(ctx, R.layout.spinner_item, list);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
holder.spinner1.setAdapter(dataAdapter);
Log.d("Holder ",""+ holder.spinner1.getSelectedItem());
//checkbox listener
holder.checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (isChecked){
selectedStudent.add(studentsName[position]);
}
}
});
}
在您的活动中,您可以访问您的变量 selectedStudent
StudentsListAdapter studentListAdapter;
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for (int i = 0; i < studentListAdapter.selectedStudent.size()-1 ; i++) {
Log.d("studentSelected".""+studentListAdapter.selectedStudent.get(i));
}
}
});
推荐阅读
- pdf-generation - 如何在 pandoc 中重新定义标题页
- hibernate - 使用 postgresql 文本类型映射 grails 域类中的 Clob 类型
- swift - 快速乘以超过 10 位的数字
- javascript - 使用 history.push 的 React-router 嵌套路由
- javascript - 如何只允许子页面处于活动状态并禁用父页面,就像弹出窗口的工作方式一样
- java - Java Wiremock 随机字符串测试失败
- reactjs - 在 React 中通过 props 传递状态
- c++ - getaddrinfo 在获取 ipv6 时返回错误 -2(getaddrinfo:名称或服务未知)
- django - 列上的 Django ORM 查询集子字符串
- html - 如何在不使用 Laravel-Forms 的情况下将信息传递给 laravel5.7 中的 RESTful 控制器