RadioGroup.setEnabled(false) 无法按预期工作

Posted

技术标签:

【中文标题】RadioGroup.setEnabled(false) 无法按预期工作【英文标题】:RadioGroup.setEnabled(false) doesn't work as expected 【发布时间】:2012-10-27 00:42:58 【问题描述】:

我用setEnabled(false)设置为不可用,但不起作用,经过这个方法,RadioGroup.isEnabled()的值为false。值已更改。

代码来自android Programming Guide。

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);
    

【问题讨论】:

【参考方案1】:

通过循环迭代和禁用属于单选组的每个按钮,例如:

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

【讨论】:

,非常感谢!而且,第二个方法实际上效果很好。它禁用了所有的 RadioButton!但第一个仍然不起作用!代码在您的机器上运行良好吗? 这是 Android 的设计缺陷吗? RadioGroup 是 View 的子类,继承了方法,setEnabled 甚至为它做了什么?【参考方案2】:

视图可以由多个可触摸元素组成。您必须将它们全部禁用,如下所示:

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

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

查找并返回作为该视图后代的所有可触摸视图,如果它本身是可触摸的,则可能包括该视图。

View#getTouchables()

【讨论】:

【参考方案3】:

下面的代码不能用;

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

一旦视图被禁用,就没有可触摸的子/后代视图了。

【讨论】:

以上是关于RadioGroup.setEnabled(false) 无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

TYPO3 Fluidcontent:如何在对象内使用 FAL

扩展 flexform 中的 FAL 图像字段

TYPO3:如何使用flux:field.inline.fal 图像作为背景

Flexform 中的 TYPO3 FAL

STM32F769I-disc片内flash对接fal框架(基于RT-thread)

ORA-16055: FAL request rejected