【问题标题】:Custom radio group not responding to onCheckChanged listener自定义无线电组未响应 onCheckChanged 侦听器
【发布时间】:2016-02-13 18:56:56
【问题描述】:

我以编程方式创建了一个自定义的三按钮单选组。但是,当我在片段中使用对象并设置 onCheckChangedListener 时,它似乎没有响应。

这是我的 radioGroup 的代码:

public class ThreeButtonRadioGroup extends RadioGroup {

    View v;
    Context mContext;
    LayoutInflater mInflater;

    int dim = ((2* DimensionsController.getInstance().getScreenWidth()) / 8)-5;


    public ThreeButtonRadioGroup(Context context) {
        super(context);
        mInflater = LayoutInflater.from(mContext);
        init();
    }

    public ThreeButtonRadioGroup(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;
        init();
    }

    RoofUIRadioButton button1, button2, button3;

    public void init(){
        mInflater = LayoutInflater.from(mContext);
        v = mInflater.inflate(R.layout.roof_ui_macro_frequency, this, true);

        (button1 = (RoofUIRadioButton) v.findViewById(R.id.button1)).initLayout(dim);
        (button2 = (RoofUIRadioButton) v.findViewById(R.id.button2)).initLayout(dim);
        (button3 = (RoofUIRadioButton) v.findViewById(R.id.button3)).initLayout(dim);

    }

    public void setButtonText(String[] buttonText, int preClick) {
        button1.setText(buttonText[0]);
        button2.setText(buttonText[1]);
        button3.setText(buttonText[2]);

        switch(preClick){
            case 1:
                button1.setChecked(true);
                break;
            case 2:
                button2.setChecked(true);
                break;
            case 3:
                button3.setChecked(true);
                break;
        }
    }

    public void setButtonText(String[] buttonText) {
        button1.setText(buttonText[0]);
        button2.setText(buttonText[1]);
        button3.setText(buttonText[2]);
    }
}

这是我为广播组添加的 xml:

<?xml version="1.0" encoding="utf-8"?>
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="5dp"
android:dividerPadding="20dp"
android:showDividers="middle">

<RadioButton
    android:id="@+id/button1"
    android:button="@null"
    android:layout_width="45dp"
    android:layout_height="45dp"
    android:padding="15dp"
    android:textSize="30sp"
    android:layout_gravity="center_horizontal|center_vertical"
    android:gravity="center_vertical|center_horizontal"
    style="@style/circleButton_style"
    android:tag="1"
    />

<RadioButton
    android:id="@+id/button2"
    android:button="@null"
    android:layout_width="45dp"
    android:layout_height="45dp"
    android:padding="15dp"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:textSize="30sp"
    android:layout_gravity="center_horizontal|center_vertical"
    android:gravity="center_vertical|center_horizontal"
    style="@style/circleButton_style"
    android:tag="2"
    />

<RadioButton
    android:id="@+id/button3"
    android:button="@null"
    android:layout_width="45dp"
    android:layout_height="45dp"
    android:padding="15dp"
    android:textSize="30sp"
    android:layout_gravity="center_horizontal|center_vertical"
    android:gravity="center_vertical|center_horizontal"
    style="@style/circleButton_style"
    android:tag="3"
    />

这里是我尝试应用事件监听器的地方:

        microRadioGroup = (ThreeButtonRadioGroup) view.findViewById(R.id.micro_radio_group);
    microRadioGroup.setButtonText(new String[]{"Day","Week","Month"}, 3);
    microRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
                System.out.println("CHECKED BUTTON: ");

        }
    });

【问题讨论】:

  • 在第二个代码示例中,您正在寻找一个 ID 为 micro_radio_group 的视图,我在您提供的 XML 中没有看到它。您确定一切都按照您的预期进行吗?

标签: android xml android-radiogroup android-radiobutton


【解决方案1】:

像这样试试。

RadioGroup group=(RadioGroup) findViewById(R.id.radioGroup1);

    group.setOnCheckedChangeListener(new OnCheckedChangeListener() 
       {

        public void onCheckedChanged(RadioGroup group, int checkedId) 
           {
            // TODO Auto-generated method stub
            if(radiobutton1.isChecked())
              {
                   System.out.println("CHECKED BUTTON: ");
              }
            else if(radiobutton2.isChecked())
              {


              }
         }
    });

也可以尝试使用已检查的 id。

switch(checkedId) {
    case R.id.radioButton1:
        break;
    case R.id.radioButton2:
        break;
    case R.id.radioButton3:
        break;
    }
}

希望对你有帮助!!

【讨论】:

  • 它仍然无法正常工作。无论如何,听众似乎都没有被叫到。即,每当侦听器中发生任何事件时,我都尝试发出打印语句,但它什么也没给我。我的按钮是否没有以某种方式连接到侦听器?
  • 检查我编辑的答案并尝试调试您的代码。
猜你喜欢
  • 2014-12-02
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 2012-05-20
  • 1970-01-01
  • 2014-09-30
  • 1970-01-01
相关资源
最近更新 更多