[英]How to get back the data of which radio button was selected, when using recycler view
我沒有使用RadioGroup
,我使用RecyclerView
動態地將按鈕添加到屏幕上。 我想知道,如何獲取所選按鈕的數據並在MainActivity中對其進行操作
RecyclerViewAdapter
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
of radiobutton
並在您的活動中實現它。
Adapater:
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) {
}
}
上面提到的解決方案也是正確的,反之亦然 - 您可以在適配器中添加getter以獲取lastSelectedPosition,並且在您的活動中,您已經使用adapter.getLastSelectedPosition()為您提供了適配器實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.