Java 如果单选按钮在Android中已经被点击,如何防止再次点击?
我想停止第二次点击Java 如果单选按钮在Android中已经被点击,如何防止再次点击?,java,android,Java,Android,我想停止第二次点击RadioButton,因为有人已经点击了放射组中的RadioButton。如果有人单击2次,则用户无法更改所选的单击。我试图用一个布尔值来防止这种情况,但它不起作用。我错在哪里 这是我的代码: radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGr
RadioButton
,因为有人已经点击了放射组中的RadioButton
。如果有人单击2次,则用户无法更改所选的单击。我试图用一个布尔值来防止这种情况,但它不起作用。我错在哪里
这是我的代码:
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// checkedId is the RadioButton selected
rb = (RadioButton) findViewById(checkedId);
user_radio_answer = (String) rb.getText();
rb.setOnClickListener(new View.OnClickListener() {
private boolean isChecked = true;
@Override
public void onClick(View v) {
if (isChecked) {
if (rb.isChecked() ) {
isChecked = false;
}
}
if (correct_answer1.equals(user_radio_answer)) {
rb.setBackgroundColor(Color.GREEN);
// Toast.makeText(getApplicationContext(), "Correct ☺ : " + user_radio_answer, Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Incorrect Answer :( ..Correct Answer : " + correct_answer1, Toast.LENGTH_LONG).show();
rb.setBackgroundColor(Color.parseColor("#FF5733"));
answer1 = rb_answer1.getText().toString();
answer2 = rb_answer2.getText().toString();
answer3 = rb_answer3.getText().toString();
answer4 = rb_answer4.getText().toString();
if (answer1.equals(correct_answer1)) {
rb_answer1.setBackgroundColor(Color.GREEN);
}
if (answer2.equals(correct_answer1)) {
rb_answer2.setBackgroundColor(Color.GREEN);
}
if (answer3.equals(correct_answer1)) {
rb_answer3.setBackgroundColor(Color.GREEN);
}
if (answer4.equals(correct_answer1)) {
rb_answer4.setBackgroundColor(Color.GREEN);
}
}
new RadioHttpAsyncTask().execute("http:xxxxxx-xxxxxxxxxx-xxxxxxxx");
}
});
}
});
您可以在单击后禁用它以停止侦听单击事件
rb.setEnabled(false);
编辑:
或者,您可以在单击了click listener之后删除它
rb.setOnClickListener(null);
您可以添加两个方法,然后在需要时调用它们。您可以添加条件,如果选中radiobutton,则禁用该组;如果未选中,则将其设置为enabled。清除radiogroup时,还可以将按钮设置为启用状态
public void disableRG() {
for(int i = 0; i < radioGroup.getChildCount(); i++){
((RadioButton)radioGroup.getChildAt(i)).setEnabled(false);
}
}
public void enableRG() {
for(int i = 0; i < radioGroup.getChildCount(); i++){
((RadioButton)radioGroup.getChildAt(i)).setEnabled(true);
}
}
public void disableRG(){
对于(int i=0;i
只要记住他们是否回答了问题,记住产生第一个答案的视图(RadioButton),并在单击RadioButton时再次检查该RadioButton。这假设RadioGroup中的所有单选按钮都具有相同的onClick
方法
boolean answered = false;
RadioButton radioAnswer;
public void answer1(View view) {
if (!answered) {
radioAnswer = (RadioButton) view;
answered = true;
} else {
radioAnswer.setChecked(true);
}
}
也许您可以设置一个全局布尔标志
`private boolean alreadyChecked = false;
radioGroup.setOnCheckedChangeListener(new
RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// checkedId is the RadioButton selected
rb = (RadioButton) findViewById(checkedId);
user_radio_answer = (String) rb.getText();
if (!alreadyChecked) {
rb.setOnClickListener(new View.OnClickListener() {
private boolean isChecked = true;
@Override
public void onClick(View v) {
if (isChecked) {
if (rb.isChecked() ) {
isChecked = false;
}
}
if (correct_answer1.equals(user_radio_answer)) {
rb.setBackgroundColor(Color.GREEN);
// Toast.makeText(getApplicationContext(), "Correct ☺ : " + user_radio_answer, Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Incorrect Answer :( ..Correct Answer : " + correct_answer1, Toast.LENGTH_LONG).show();
rb.setBackgroundColor(Color.parseColor("#FF5733"));
answer1 = rb_answer1.getText().toString();
answer2 = rb_answer2.getText().toString();
answer3 = rb_answer3.getText().toString();
answer4 = rb_answer4.getText().toString();
if (answer1.equals(correct_answer1)) {
rb_answer1.setBackgroundColor(Color.GREEN);
}
if (answer2.equals(correct_answer1)) {
rb_answer2.setBackgroundColor(Color.GREEN);
}
if (answer3.equals(correct_answer1)) {
rb_answer3.setBackgroundColor(Color.GREEN);
}
if (answer4.equals(correct_answer1)) {
rb_answer4.setBackgroundColor(Color.GREEN);
}
}
new RadioHttpAsyncTask().execute("http:xxxxxx-xxxxxxxxxx-xxxxxxxx");
}
alreadyChecked = true;
});
}
}
});`
您可以禁用该按钮,但这也会对UI产生影响。您还可以保留一个在实际执行方法中设置/检查的标志,以查看是否要执行代码使用一个整数,比如计数器,减少其值,增加并清除它可能是因为您正在设置OnClickListener
内部onCheckedChanged
。这意味着在任何检查更改后,您当前的单选按钮
清除了以前在字段中的所有信息。尝试将它设置在onCheckedChanged方法之外。好的,谢谢你的建议:)我不想启用它,只想停止第二次单击该组中的任何单选按钮,如果它已经单击过一次。这将阻止第二次单击它100%按要求工作!先生,谢谢你的建议:)谢谢!马蒂亚斯·纽伯特。它解决了我50%的问题,但不是全部问题。但是,单选按钮仍处于单击模式,我想停止该模式。