【问题标题】:How to add a listener to dynamically created RadioButtons?如何将侦听器添加到动态创建的 RadioButtons?
【发布时间】:2015-02-04 22:34:02
【问题描述】:

我有一个ListView 的问题。在每一行中都有一个问题和一个RadioGroup 以及可能的答案。并非所有问题都有相同数量的答案,因此我在自定义ListAdapter 中动态添加RadioButtons。我的问题是如何将监听器添加到这些动态创建的RadioButtons。我的代码:

RadioGroup rg = (RadioGroup) convertView.findViewById(R.id.question);
        rg.removeAllViews();
        for (String qA : question.answers) {
            RadioButton rb = new RadioButton(getContext());
            rb.setText(qA.toString());
            rg.addView(rb);

        }

        rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch(checkedId) {
                    //WHAT SHOULD I PUT HERE?
                }
            }
        });

【问题讨论】:

  • 您想确定哪个动态添加的 RadioButton 的状态已更改。对吗?
  • @user370305 是的,你是对的。
  • 好的,在单选按钮的 for 循环中,只需为每个 RadioButton 设置 Id。根据循环计数。喜欢rb.setId(count);
  • 我应该在循环内的单选按钮上简单地使用 setId(id) 吗?
  • 最有可能的是,rg.setId(position); // list item position of getView()rb.setId(count); // for loop count .. 现在在 onCheckedChanged group.getId() 返回列表项位置,checkedId 返回单选按钮的位置。

标签: android android-listview android-adapter android-radiogroup android-radiobutton


【解决方案1】:

大概是这样的:

@Override public void onCheckedChanged(RadioGroup group, int checkedId) {
    RadioButton btn = (RadioButton)findViewById(checkedId);
}

然后是btn的东西? :)

【讨论】:

    【解决方案2】:

    找到选中的按钮

    View checkedButton = rg.findViewById(checkedId);
    

    查找选中按钮的索引

    int checkedIndex = rg.indexOfChild(checkedButton);
    

    在执行上述操作之前,您必须将 id 设置为 cmets rb.setId(count) 中提到的按钮。对于组中的每个按钮,计数必须是唯一的。

    【讨论】:

      【解决方案3】:

      1 首先在您的适配器中创建 CompoundButton.OnCheckedChangeListener 的全局变量,例如私有 CompoundButton.OnCheckedChangeListener listener

      2 秒后,您必须在创建单选按钮时将侦听器变量附加到单选按钮。

      3 当你将数据或值与你的 ui 绑定时,你必须调用这个方法

      listener = new CompoundButton.OnCheckedChangeListener() 
      {
                  @Override
                  public void onCheckedChanged ( CompoundButton buttonView, boolean isChecked ) 
      {
      
                  }
              };
      

      【讨论】:

        猜你喜欢
        • 2021-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多