RadioGroup.setEnabled(false)不能如期工作。

问题描述 投票:32回答:3

我已经使用了 setEnabled(false) 来设置为无法,但这是行不通的,而且在这个方法之后,这个值的 RadioGroup.isEnabled() 是假的。值被更改。

代码来自Android编程指南。

PS:该 Spinner 组件的使用 setEnabled(false) 也是。

代码如下。

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RadioGroup;

public class TestRadioGroup extends Activity {


@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.radiogroup);

    final RadioGroup testRadioGroup = (RadioGroup) findViewById(R.id.testRadioGroup);

    final Button changeEnabledButton = (Button) findViewById(R.id.changeEnabledButton);
    changeEnabledButton.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            changeEnabled(testRadioGroup);
        }
    });

    final Button changeBgColorButton = (Button) findViewById(R.id.changeBackgroundColorButton);
    changeBgColorButton.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            changeBgColor(testRadioGroup);
        }
    });

}

protected void changeBgColor(RadioGroup testRadioGroup) {
    // TODO Auto-generated method stub
    testRadioGroup.setBackgroundColor(Color.BLUE);
}

protected void changeEnabled(RadioGroup testRadioGroup) {
    // TODO Auto-generated method stub
    if (testRadioGroup.isEnabled()) {
        testRadioGroup.setEnabled(false);
    } else {
        testRadioGroup.setEnabled(true);
    }
}

}

android android-widget
3个回答
89
投票

使用以下方法。

for (int i = 0; i < testRadioGroup.getChildCount(); i++) {
    testRadioGroup.getChildAt(i).setEnabled(false);
}

4
投票

视图可以由多个可触摸元素组成。你必须把它们全部禁用,像这样。

for(View lol : your_spinner.getTouchables() ) {
    lol.setEnabled(false);
}

如果它是一个简单的,因为它也返回自己。

找到并返回所有这个视图的后裔的可触摸视图,如果这个视图本身是可触摸的,则可能包括它。

视图#getTouchables()


0
投票

你不能使用下面的代码。

for(View lol : your_spinner.getTouchables() ) {
    lol.setEnabled(false);
}

一旦views被禁用,就没有可触摸的childdescentant视图了。

© www.soinside.com 2019 - 2024. All rights reserved.