我的应用程序会跟踪餐厅服务员的轮类销售情况,以帮助他们进行预算。在显示过去类次的 Activity 中,我在 ListView 下创建了一个 RadioGroup,以便用户可以选择显示午餐、晚餐或两者。

我已经在 RadioGroup.onCheckedChangeListener Activity 中实现了,但是 onCheckedChanged 永远不会被调用。我也尝试使用匿名内部类作为监听器,结果相同。

我试图从这个答案中复制/修改代码:https://stackoverflow.com/a/9595528 ...但是当我将 @Override 添加到回调函数时,Eclipse 编译器给了我一个错误(不是警告),该方法必须覆盖父类(super class),快速修复是删除覆盖。

我很确定签名是匹配的,因为它们是用 Eclipse 的自动完成和实现方法工具制作的。然后我按照说明将我的 java 编译器从 1.5 移动到 1.6,并且上面列出的行为似乎都没有改变。

这是我认为相关的代码:

public class DataActivity extends ListActivity implements OnCheckedChangeListener{
    RadioButton rbBoth;
    RadioButton rbDinnerOnly;
    RadioButton rbLunchOnly;

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.database);
        // ...
        final RadioGroup rgGroup = (RadioGroup)findViewById(R.id.DataRadioGroup);
        rbBoth = (RadioButton)findViewById(R.id.RadioBoth);
        rbDinnerOnly = (RadioButton)findViewById(R.id.RadioDinnerOnly);
        rbLunchOnly = (RadioButton)findViewById(R.id.RadioLunchOnly);
        rgGroup.setOnCheckedChangeListener(this);
        populateAllShifts();
    }

    // ...

    public void onCheckedChanged(RadioGroup group, int checkedId) {
        rbLunchOnly.setText("Click!");
        Toast.makeText(getApplicationContext(), "Lunch Only", Toast.LENGTH_LONG).show();
        if(group.getCheckedRadioButtonId() == R.id.RadioBoth){
            populateAllShifts();
            return;
        }
        if(group.getCheckedRadioButtonId() == R.id.RadioLunchOnly){
            populatLunchShifts();
            return;
        }
        if(group.getCheckedRadioButtonId() == R.id.RadioDinnerOnly){
            populateDinnerShifts();
            return;
        }
    }

    // ...

}

这个类中有一个带有自定义适配器的 ListView,但如果我的理解和我的 XML 是正确的,那么 RadioGroup 应该在列表之外:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/llDataLayout"
    android:weightSum="5"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:orientation="vertical">

    <ListView android:layout_weight="4"
        android:layout_width="fill_parent"
        android:id="@android:id/list"
        android:layout_height="wrap_content">
    </ListView>

    <RadioGroup
        android:layout_weight="1"
        android:id="@+id/DataRadioGroup"
        android:orientation="horizontal"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent">

        <RadioButton android:text="Lunch and Dinner"
            android:textSize="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/RadioBoth"/>
        <RadioButton android:text="Dinner Only"
            android:textSize="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/RadioDinnerOnly"/>
        <RadioButton android:text="Lunch Only"
            android:textSize="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/RadioLunchOnly"/>

    </RadioGroup>

</LinearLayout>

有什么想法吗?

最佳答案

您已经获得 checkedId 作为参数,即新选中的单选按钮的唯一标识符。

public void onCheckedChanged(RadioGroup group, int checkedId) {
    rbLunchOnly.setText("Click!");
    Toast.makeText(getApplicationContext(), "Lunch Only", Toast.LENGTH_LONG).show();

    switch(checkedId){
    case R.id.RadioBoth :
        populateAllShifts();
        break;

    //--other cases---

   }

关于android - RadioGroup onCheckedChanged 函数不会触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12966907/

10-12 05:52