选中后禁用复选框,安卓系统。

21

我想实现这个功能:当用户勾选未选中的复选框时,显示一个提示信息,然后将该复选框禁用。

male.setOnCheckedChangeListener(new OnCheckedChangeListener(){

    @Override
    public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {
   // TODO Auto-generated method stub
   if (isChecked){
    Toast.makeText(CheckBoxTuts.this, "male" , Toast.LENGTH_SHORT).show();
    male.setChecked(false);

   }
    }

       });

输出失败,因为它们同时执行,即使我将 male.setChecked(false) 放在外面.. 我不能回忆起有什么东西可以先运行一些东西,然后运行其他东西.. 是线程吗?真的记不起来了

5个回答

40

如果您想实现以下功能:"用户在未选中的复选框上进行检查,显示吐司消息,然后禁用该复选框。",您可以尝试此代码:

male.setOnCheckedChangeListener(new OnCheckedChangeListener(){

    @Override
    public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {                   
      if (isChecked){
          Toast.makeText(CheckBoxTuts.this, "male" , Toast.LENGTH_SHORT).show();
          male.setEnabled(false); // disable checkbox 
      }
    }    
});

1
我使用了你的代码来检查它是否工作,但是 setEnabled(false) 不起作用。 - Terril Thomas
@ErrorHandler:它不是无效的方法,那么为什么它不能工作?你面临的问题是什么? - Hiral Vadodaria
@ErrorHandler:它会禁用复选框,但并不意味着更改复选框的状态。它仍将保持选中状态,只是一旦进入“已选中”状态,就无法再更改其状态。 - Hiral Vadodaria
所以,即使在调试时SetChecked(false)起作用,因为它会返回false。 - Terril Thomas
1
@ErrorHandler:他想禁用复选框,而不是将其“取消选中”... 你不能使用setChecked(false)来禁用复选框。它会将复选框的状态更改为false。请阅读文档和问题以获取更多信息。 - Hiral Vadodaria
显示剩余2条评论

8

试一下这个...

-CheckBox 上使用 setEnabled(false)

male.setOnCheckedChangeListener(new OnCheckedChangeListener(){

    @Override
    public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {                   
      if (isChecked){

          Toast.makeText(CheckBoxTuts.this, "male" , Toast.LENGTH_SHORT).show();

          male.setEnabled(false);   // Will Disable checkbox 
      }
    }    
});

2
male.setOnCheckedChangeListener(new OnCheckedChangeListener(){

@Override
public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {
  // TODO Auto-generated method stub
   if (isChecked){
   Toast.makeText(CheckBoxTuts.this, "male" , Toast.LENGTH_SHORT).show();
    //male.setVisibility(View.GONE);//disappear your check box
    male.setEnabled(false);//disable your check box
}
}

});

2

尝试使用已实现的View.OnClickListener.onClickListener(View.OnClickListener)。在已实现方法内,您将检查CheckBox是否被选中并设置它们。


哦,事实上。要设置启用/禁用状态,您需要使用View.setEnabled(boolean)。 - Pawel
使用 View.setVisibilty(int) 将设置组件是否可见。 - Pawel
你需要使用方法 CheckBox.isChecked() 来检查复选框是否被选中。 - Pawel

1

首先,将您的复选框注册到OnCheckedChangeListener中。

chk.setOnCheckedChangeListener(this);

然后,覆盖它的方法。
 @Override
    public void onCheckedChanged(CompoundButton compoundButton, boolean b)
    {
        if (chk.isChecked())
        {
           chk.setEnabled(false);
        }
    }

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