使用RecyClerview上的多个无线电按钮进行一个选择的广播按钮


 @Override
    public void onBindViewHolder(@NonNull StateViewHolder stateViewHolder, int i) {
            GetStateApiResponse getStateApiResponse = state.get(i);
        stateViewHolder.btnstate.setText(getStateApiResponse.getStateName().toString());
        stateViewHolder.disttCount.setText(getStateApiResponse.getCount().toString());
       stateViewHolder.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
           @Override
           public void onCheckedChanged(RadioGroup group, int checkedId) {
               RadioButton checked_rb = group.findViewById(checkedId);
               if (lastChecked != null) {
                   lastChecked.setChecked(false);
               }
               //store the clicked radiobutton
               lastChecked = checked_rb;
           }
       });   

}

如果我单击"广播"按钮,则此代码在recyclerview上不相同。

此问题的正确答案

private RadioButton lastChecked
...
    @Override
        public void onBindViewHolder(@NonNull StateViewHolder stateViewHolder, int i) {
                GetStateApiResponse getStateApiResponse = state.get(i);
            stateViewHolder.btnstate.setText(getStateApiResponse.getStateName().toString());
            stateViewHolder.disttCount.setText(getStateApiResponse.getCount().toString());

            if (lastChecked!=null && lastCheckedPos!=-1 && i==lastCheckedPos)
            {
                lastChecked.setChecked(true);
            }
            else
            {
                stateViewHolder.btnstate.setChecked(false);
            }

            stateViewHolder.btnstate.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    for(GetStateApiResponse tempModel: state)
                        tempModel.setSetchecked(false);
                    state.get(i).setSetchecked(true);
                    lastCheckedPos=i;
                    if(null != lastChecked && !v.equals(lastChecked))
                        lastChecked.setChecked(false);
                    lastChecked = (RadioButton) v;
                    lastChecked.setChecked(true);

                }
            });

        }

我认为这是因为 lastChecked是一个实例变量,并且保留了所有列表项目的状态。您可以通过为列表中的每个项目指定lastChecked变量来解决此问题。

相关内容

最新更新