我有一个回收视图,其中每个项目有3个无线电按钮分组在一个无线电组。现在,在回收视图中,用户只能选择每个项目一个无线电按钮。但我希望用户在整个回收视图中只选择一个无线电按钮。如何才能做到这一点?
这就是它目前的样子。
我希望能够在回收商的整个视图中只检查一个无线电按钮。如果选中第一项中的第一个单选按钮,然后用户单击第二项中的第二个无线电按钮,则第一项中的第一个无线电按钮应该不被选中。
发布于 2016-04-29 05:29:45
下面是另一种同样的方法。这比我以前的回答更优雅。但我保留了这两个问题,因为上一个答案提供了更大的灵活性。
private RadioButton lastCheckedRB = null;
...
@Override
public void onBindViewHolder(final CoachListViewHolder holder, final int position) {
holder.priceRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
RadioButton checked_rb = (RadioButton) group.findViewById(checkedId);
if (lastCheckedRB != null) {
lastCheckedRB.setChecked(false);
}
//store the clicked radiobutton
lastCheckedRB = checked_rb;
}
});
发布于 2016-02-06 01:34:06
以下是对我起作用的东西:
private RadioButton lastCheckedRB = null;
...
@Override
public void onBindViewHolder(final CoachListViewHolder holder, final int position) {
View.OnClickListener rbClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
RadioButton checked_rb = (RadioButton) v;
if(lastCheckedRB != null){
lastCheckedRB.setChecked(false);
}
lastCheckedRB = checked_rb;
}
};
//price_1m, price3m, price_6m are RadioButtons inside a radiogroup
holder.price1m.setOnClickListener(rbClick);
holder.price3m.setOnClickListener(rbClick);
holder.price6m.setOnClickListener(rbClick);
在这里,单选按钮暂时存储在lastCheckedRB中。当一个新的单选按钮被点击时,旧的无线电按钮将被取消检查。最初,lastCheckedRB被设置为null。
发布于 2018-01-30 06:45:12
我用了这个方法
public class OffersRecyclerViewAdapter extends RecyclerView.Adapter<OffersRecyclerViewAdapter.ViewHolder> {
private List<OffersModel> offersList;
private Context context;
private int lastSelectedPosition = -1;
public OffersRecyclerViewAdapter(List<OffersModel> offersListIn, Context ctx) {
offersList = offersListIn;
context = ctx;
}
@Override
public OffersRecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.offer_item, parent, false);
OffersRecyclerViewAdapter.ViewHolder viewHolder =
new OffersRecyclerViewAdapter.ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(OffersRecyclerViewAdapter.ViewHolder holder, int position) {
//since only one radio button is allowed to be selected,
// this condition un-checks previous selections
holder.selectionState.setChecked(lastSelectedPosition == position);
}
@Override
public int getItemCount() {
return offersList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
public RadioButton selectionState;
public ViewHolder(View view) {
super(view);
selectionState = (RadioButton) view.findViewById(R.id.offer_select);
selectionState.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
lastSelectedPosition = getAdapterPosition();
notifyDataSetChanged();
}
});
}
}
}
https://stackoverflow.com/questions/35218633
复制相似问题