android - 使用回收站视图时如何取回选择了哪个单选按钮的数据
问题描述
我没有使用RadioGroup
,而是使用 . 将按钮动态添加到屏幕上RecyclerView
。我想知道,如何在 MainActivity 中获取被选中的按钮的数据并对其进行操作
回收器视图适配器
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
private String[] data;
private int lastSelectedPosition = -1;
public RecyclerViewAdapter(String[] data){
this.data = data;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
View view = inflater.inflate(R.layout.list_item_layout,viewGroup,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
String title = data[i];
Log.i("TAG2",Integer.toString(i));
Log.i("TAG3",title);
viewHolder.radioButton.setText(title);
viewHolder.radioButton.setChecked(lastSelectedPosition==i);
}
@Override
public int getItemCount() {
Log.i("TAG",Integer.toString(data.length));
return data.length;
}
public class ViewHolder extends RecyclerView.ViewHolder{
RadioButton radioButton;
public ViewHolder(@NonNull View itemView) {
super(itemView);
radioButton = itemView.findViewById(R.id.radioButton);
radioButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
lastSelectedPosition = getAdapterPosition();
notifyDataSetChanged();
}
});
}
}
}
MainActivity 类
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView = findViewById(R.id.my_recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
String[] lang = {"English","Hindi","French"};
recyclerView.setAdapter(new RecyclerViewAdapter(lang));
//Want to get data of the RadioButton Selected
}
}
单选按钮是语言,在选择特定语言时,我希望整个屏幕以该特定语言显示内容。我想通过知道在 MainAcitivity 类中选择了哪个单选按钮来动态地做到这一点。
解决方案
interface
在您的适配器中创建并在您的活动onclick
中radiobutton
实现它。
适配器:
public class RvAdapter extends RecyclerView.Adapter<RvAdapter.ViewHolder> {
private ItemClickListener mClickListener;
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
Button btn_remove;
ViewHolder(View itemView) {
super(itemView);
btn_remove = itemView.findViewById(R.id.btn_remove);
btn_remove.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition());
}
}
public void setClickListener(ItemClickListener itemClickListener) {
this.mClickListener = itemClickListener;
}
public interface ItemClickListener {
void onItemClick(View view, int position);
}
}
活动:
public class MainActivity extends AppCompactActivity implements RvAdapter.ItemClickListener {
@Override
public void onCreate(...) {
RvAdapter.setClickListener(this);
}
@Override
public void onItemClick(View view, int position) {
}
}
推荐阅读
- electron - NWJS,Electron - DOM 在长时间运行过程中不更新
- python - 是否有类似于 Pandas 的 df.combine_first 的 pyspark 函数?
- asp.net-core - 引用 .NET 项目的 ASP.NET Core 项目无法使用 msbuild 构建
- angular - 有没有办法向 proxy.config.json 添加注释?
- python - 如何编写一个函数“triplets”,它接受一个数字并返回一个三元组列表?
- r - 在计算 P^n 时,matrixpower() 和 markov() 有什么区别?
- javascript - 如何在自动输入javascript时更改textarea中的文本
- angular - Okta 登录小部件打破了 Jest 测试 - TypeError:无法读取 null 的属性“backingStorePixelRatio”
- go - 工作池实施上的退出通道
- internet-explorer-11 - 在 IE11 中禁用 HTTP2