【问题标题】:Clearing RadioGroup inside a ListView清除 ListView 中的 RadioGroup
【发布时间】:2017-12-22 19:06:54
【问题描述】:

我有一个由ArrayAdapter 设置的自定义ListView。 每行都有一个 TextView 和 3 个 RadioButtons。

填充AdapterView 的对象如下所示:

public class MyItem {

    public String title = "";
    public boolean rb1 = false;
    public boolean rb2 = false;
    public boolean rb3 = false;

    public MyItem(String title, boolean rb1, boolean rb2, boolean rb3) {
        this.title = title;
        this.rb1 = rb1;
        this.rb2 = rb2;
        this.rb3 = rb3;
    }

}

getView() 方法中,我设置了OnLongClickListener,因为我想在长按一行后清除选择:

public class MyAdapter extends ArrayAdapter<MyItem> {

    private Context context;
    private int layoutResourceId;
    private ArrayList<MyItem> items = null;

    public MyAdapter(Context context, int textViewResourceId, ArrayList<MyItem> objects) {
        super(context, textViewResourceId, objects);
        this.layoutResourceId = textViewResourceId;
        this.context = context;
        this.items = objects;
    }

    @Override
    public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        View row = convertView;
        final MyItemHolder holder;

        if (row == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(layoutResourceId, parent, false);
            holder = new MyItemHolder();
            holder.tvTitle = (TextView) row.findViewById(R.id.tvTitle);
            holder.rb1 = (RadioButton) row.findViewById(R.id.rb1);
            holder.rb2 = (RadioButton) row.findViewById(R.id.rb2);
            holder.rb3 = (RadioButton) row.findViewById(R.id.rb3);
            row.setTag(holder);
        } else {
            holder = (MyItemHolder)row.getTag();
        }

        String title = items.get(position).title;
        Boolean rb1Checked = items.get(position).rb1;
        Boolean rb2Checked = items.get(position).rb2;
        Boolean rb3Checked = items.get(position).rb3;

        holder.tvTitle.setText(title);
        holder.rb1.setChecked(rb1Checked);
        holder.rb2.setChecked(rb2Checked);
        holder.rb3.setChecked(rb3Checked);

        row.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                items.get(position).rb1 = false;
                items.get(position).rb2 = false;
                items.get(position).rb3 = false;
                holder.rb1.setChecked(false);
                holder.rb2.setChecked(false);
                holder.rb3.setChecked(false);
                notifyDataSetChanged();
                return true;
            }
        });

        return row;
    }

    static class MyItemHolder  {
        TextView tvTitle;
        RadioButton rb1;
        RadioButton rb2;
        RadioButton rb3;
    }

}

这样就可以了,但是... 假设第一个 RadioButton 被选中,长按该行后,没有一个 RadioButtons 被选中,但我无法再次选择第一个。我可以选择第二个或第三个,但不能选择第一个。

【问题讨论】:

  • 尝试使用 your_radiobutton1.setChecked(false); 并为您要清除的特定项目内的所有 RadioButtons 执行此操作。
  • 我试过了,但它的行为是一样的。
  • 更新你的整个适配器代码
  • 刚刚更新了适配器代码。

标签: android listview android-radiobutton


【解决方案1】:

你可以通过使用来解决这个问题

radioGroup.clearCheck()

而不是

radioButtonA.setChecked(false)

为此,您需要为要清除的每个项目获取对单选组的引用。

【讨论】:

  • 是的!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多