如何设置editText可见/不可见?

3

在我的程序中,我希望能够在用户选择一个单选按钮时隐藏编辑文本,并在用户点击另一个单选按钮时重新显示。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.waist2height); {
        final EditText h = (EditText)findViewById(R.id.editText2);          
        final RadioButton rCM = (RadioButton) findViewById(R.id.radioCM);
        final RadioButton rFT = (RadioButton) findViewById(R.id.radioFT);                       
        if(rCM.isChecked()){    
            h.setVisibility(View.VISIBLE);              
        }
        else if(rFT.isChecked()){               
            h.setVisibility(View.INVISIBLE);
        }}

下面的代码是我遇到问题的地方,我只添加了相关代码而不是全部内容。
if(rCM.isChecked()){                    
    h.setVisibility(View.VISIBLE);                  
}
else if(rFT.isChecked()){                   
    h.setVisibility(View.INVISIBLE);
} 

不幸的是,我似乎无法让它正常工作。 我有什么遗漏了吗?还是完全搞错了? 我尝试过h.setVisibility(View.GONE);,但它只是破坏了xml的格式。


你在单选按钮中使用了setOnCheckedChangeListener吗? - Hussein El Feky
使用监听器事件来触发可见方法,而不是使用变量! - XxGoliathusxX
这一定是可以工作的...请在此提供您的代码,然后我们就可以找到问题了。 - Nooruddin Lakhani
我已经添加了相关部分而不是整个内容。 - Ashraf96
3个回答

3
RadioGroup radioGroup = (RadioGroup) findViewById(R.id.yourRadioGroup);        
    radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() 
    {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            if(checkedId==0){

                h.setVisibility(View.VISIBLE);

            }
            else if(checkedId==1){

                h.setVisibility(View.INVISIBLE);
            } 
        }
    });

它似乎不起作用,可能是因为(checkedId == 0)的原因? - Ashraf96
首先他使用的是 RadioButton 而不是 RadioGroup,其次如果你阅读 RadioGroup 文档,当复选框被清除时,checkedid 是 -1。 - Skizo-ozᴉʞS ツ

1
尝试这个:

rCM.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
    h.setVisibility(View.VISIBLE);
}
});
rFT.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
    h.setVisibility(View.INVISIBLE);              
}
});

0

我已经制作了一个样例,它对我有效,请看一下这段代码:

我已将这些变量声明为全局变量

RadioButton rb1,rb2;
TextView tbHideOrNot;

然后在我的onCreate()中,我有这个:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    rb1 = (RadioButton)findViewById(R.id.rb1);
    rb2 = (RadioButton)findViewById(R.id.rb2);
    tbHideOrNot = (TextView)findViewById(R.id.textView);
    rb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(isChecked){
                tbHideOrNot.setVisibility(View.INVISIBLE);
                rb2.setChecked(false);
            }
        }
    });
    rb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(isChecked){
                tbHideOrNot.setVisibility(View.VISIBLE);
                rb1.setChecked(false);
            }
        }
    });

}

在我看来,对于您所需的用途,使用 RadioButton 不是一个好主意,我建议您使用 CheckBox,因为您只能选择一个,这样您必须检查第一个 RadioButton 是否被选中,如果您按下第二个选项,则需要取消第一个选项等等......好吧,这是您的代码,我只是给您提供建议,此代码对我有效,如果对您有效,请告诉我:)

顺便说一下,如果您想使用此代码:

if(rCM.isChecked()){                    
 h.setVisibility(View.VISIBLE);                  
}
else if(rFT.isChecked()){                   
 h.setVisibility(View.INVISIBLE);
} 

这个方法是可以运行的,但是你只能在Activity开始时隐藏或显示TextView,而且如果你想要让TextView被显示或不被显示,你必须加入任何一个RadioButton(如果你想),并设置android:checked="true"false,但是使用这段代码后,你将无法响应RadioButtons的点击事件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接