0

我有以下代码:

private void inflateCustomView()
    {
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View customNav = inflater.inflate(R.layout.custom_view, null);

    //Bind to its state change
    RadioGroup radioGrp = ((RadioGroup)customNav.findViewById(R.id.radio_nav));
    radioGrp.setOnCheckedChangeListener(new OnCheckedChangeListener()
    {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId)
        {
            switch(checkedId)
            {
            case R.id.moneyRadioBtn:
                    isInCashMode = true;
                    break;
            case R.id.unitRadioBtn:
                    isInCashMode = false;
                    break;
            }

            setCashOrUnits(isInCashMode);
        }
    });

    //Attach to the action bar
    getSupportActionBar().setCustomView(customNav);
    getSupportActionBar().setDisplayShowCustomEnabled(true);

    }

自定义视图似乎已正确添加,但从未调用过 onCheckedChanged。我尝试在 onCheckedChanged 中插入断点,但从未达到。我究竟做错了什么?

编辑:这是 custom_view 的 XML

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:gravity="left|center_vertical"
    android:orientation="horizontal"
    >
    <RadioGroup
        android:id="@+id/radio_nav"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    >
        <RadioButton
            android:id="@+id/moneyRadioBtn"
            android:text="Kr"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@android:color/white"

        />
        <RadioButton
            android:id="@+id/unitRadioBtn"
            android:text="Enheder"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@android:color/white"
        />
    </RadioGroup>
</LinearLayout>
4

4 回答 4

0

Check with below code...

    RadioGroup radioGrp = ((RadioGroup)customNav.findViewById(R.id.radio_nav));
int checkedRadioButtonID = radioGrp.getCheckedRadioButtonId();
            radioGrp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
            {
                @Override
                public void onCheckedChanged(RadioGroup group, int checkedId)
                {
                    switch(checkedId)
                    {
                    case R.id.moneyRadioBtn:
                            isInCashMode = true;
                            break;
                    case R.id.unitRadioBtn:
                            isInCashMode = false;
                            break;
                    }

                    setCashOrUnits(isInCashMode);
                }
            });

Notice,

radioGrp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()

Hope, this helps..

于 2013-05-13T15:05:47.537 回答
0

我今天遇到了这个问题,看起来很荒谬:

它需要 CheckBox.OnCheckedChangeListener。RadioGroup 公然拒绝接受 RadioGroup.OnCheckedChangeListener 但与 CheckBox 一起工作正常。

我什至不知道发生了什么,但它是这样工作的。仅仅。

于 2014-12-08T14:04:41.140 回答
0

您可能应该粘贴到您的 XML 布局中,有时那里可能会出现阻止 Radio Group 拾取其中的按钮的问题。

自从我与他们合作以来已经有一段时间了,但我相信在 XML 中,Buttons 必须直接位于 XML 中的父 RadioGroup 下,因此,例如,如果您在 RadioGroup 中的 LinearLayout 中有 RadioButton,则 RadioGroup 不会拿起按钮,因为它不是直接孩子。

编辑:另一种方法是在代码中获取对每个 RadioButton 的引用,定义一个 CompoundButton.OnCheckedChangeListener 来处理事件,然后调用

myRadioButton.setOnCheckedChangeListener(myOnCheckChangeListener);

对于他们每个人。有点笨拙(您必须在 onCheckedChanged() 方法中手动获取已检查视图的 id)但它有效!

于 2013-05-13T15:28:32.963 回答
0

你也可以像这样检查。

radioGrp.setOnCheckedChangeListener(new OnCheckedChangeListener() {

    public void onCheckedChanged(RadioGroup arg0, int arg1) {

        RadioButton radioButton = (RadioButton) findViewById(radioGroup
                .getCheckedRadioButtonId());
        if (radioButton.getText().equals("radiobutton name")) {
            isInCashMode = true;
        } else {
            isInCashMode = false;
        }
    }
});

试试看嘛。它可能会帮助你。

于 2013-05-13T15:15:09.233 回答