Recyclerview从radiobutton获取数据

时间:2018-05-15 04:38:11

标签: android android-recyclerview android-adapter android-radiobutton

我想在recyclerView中只选择一个单选按钮,并在其Activity中获取其数据。

我已经完成了以下解决方案:

我做了一个解决方案:

private static int lastCheckedPos = -1;

    binding.radioButton.setChecked(mImagesList.get(position).isSelected());
    binding.radioButton.setTag(new Integer(position));

                //for default check in first item
                if(position == 0 && mImagesList.get(0).isSelected() && binding.radioButton.isChecked())
                {
                    radioButton = binding.radioButton;
                    lastCheckedPos = 0;
                }

                binding.radioButton.setOnClickListener(new View.OnClickListener()
                {
                    @Override
                    public void onClick(View v)
                    {
                        RadioButton cb = (RadioButton)v;
                        int clickedPos = ((Integer)cb.getTag()).intValue();

                        if(cb.isChecked())
                        {
                            if(radioButton != null)
                            {
                                radioButton.setChecked(false);
                                mImagesList.get(lastCheckedPos).setSelected(false);
                            }

                            radioButton = cb;
                            lastCheckedPos = clickedPos;
                        }
                        else
                            radioButton = null;

                        mImagesList.get(clickedPos).setSelected(cb.isChecked());
                    }
                });

我用onBindViewHolder方法写了这个。

现在要获取我在adapter中写的数据:

public String getUserId() {

        if(lastCheckedPos == -1)
        {
            return null;
        } else {
            return mImagesList.get(lastCheckedPos).getUser_code();
        }
    }

在活动中得到这个:

 userId = adapter.getUserId();

但我无法获取活动中的任何数据。它始终显示为null。此外,如果我在单选按钮上单击两次,则取消选择。

请问是否有任何不清楚的地方。任何帮助将不胜感激。

谢谢:)

1 个答案:

答案 0 :(得分:3)

int clickedPos = ((Integer)cb.getTag()).intValue();替换为int clickedPos =position;