首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在回收视图中只选择一个无线电按钮

在回收视图中只选择一个无线电按钮
EN

Stack Overflow用户
提问于 2016-02-05 07:36:03
回答 7查看 43.7K关注 0票数 11

我有一个回收视图,其中每个项目有3个无线电按钮分组在一个无线电组。现在,在回收视图中,用户只能选择每个项目一个无线电按钮。但我希望用户在整个回收视图中只选择一个无线电按钮。如何才能做到这一点?

这就是它目前的样子。

我希望能够在回收商的整个视图中只检查一个无线电按钮。如果选中第一项中的第一个单选按钮,然后用户单击第二项中的第二个无线电按钮,则第一项中的第一个无线电按钮应该不被选中。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2016-04-29 05:29:45

下面是另一种同样的方法。这比我以前的回答更优雅。但我保留了这两个问题,因为上一个答案提供了更大的灵活性。

代码语言:javascript
运行
复制
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;
        }
    });
票数 31
EN

Stack Overflow用户

发布于 2016-02-06 01:34:06

以下是对我起作用的东西:

代码语言:javascript
运行
复制
 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。

票数 19
EN

Stack Overflow用户

发布于 2018-01-30 06:45:12

我用了这个方法

代码语言:javascript
运行
复制
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();

                }
            });
        }
    }
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35218633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档