如何取消选中或清除单选按钮组?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何取消选中或清除单选按钮组?相关的知识,希望对你有一定的参考价值。
我是android新手..
我在取消选中组中的单选按钮时遇到问题....
我的问题是......
我正在开发一个基于测验的应用程序。用户打开此应用程序时,将有1个任务和4个选项(单选按钮)未选中,但是当用户回答1个任务并且当他去下一个任务单选按钮时,问题将被检查。我想取消选中/重置每个任务的单选按钮。我该怎么办?
我面临的另一个问题是......如果假设用户选择了第一个按钮并再次想要更改选项,那么他选择另一个按钮,那时他不应该选择..
怎么实现这个?
任何帮助,将不胜感激。
protected void onPostExecute(String file_url) { pDialog.dismiss(); ques1=new ArrayList<String>(new ArrayList<String>(ques1)); // j=0; TextView txtque = (TextView) findViewById(R.id.que_txt); txtque.setText(ques1.get(j)); answ1=new ArrayList<String>(new ArrayList<String>(answ1)); btn_practice1.setText(answ1.get(0)); btn_practice2.setText(answ1.get(1)); btn_practice3.setText(answ1.get(2)); btn_practice4.setText(answ1.get(3)); btn_practicerg.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { RadioButton radioButton = (RadioButton) findViewById(checkedId); // error // is here 205 line.. String temp = radioButton.getText().toString(); crrtans=new ArrayList<String>(new ArrayList<String>(crrtans)); if (temp.equals(crrtans.get(l))){ TextView txtRadio = (TextView) findViewById(R.id.rdtxt); txtRadio.setText("" + radioButton.getText() + " IS CORRECT"); txtRadio.setTextColor(Color.parseColor("#008000")); }else{ //RadioButton radioButton1 = (RadioButton) findViewById(checkedId); // Toast.makeText(Question.this, "" + radioButton.getText(), 2000).show(); TextView txtRadio = (TextView) findViewById(R.id.rdtxt); txtRadio.setText("" + radioButton.getText() + "is INCORRECT"); txtRadio.setTextColor(Color.parseColor("#FF0000")); } } }); Button nextBtn = (Button) findViewById(R.id.nxt_btn); nextBtn.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v){ // btn_practicerg.clearCheck(); if (j == ques1.size() -1) { //finish(); showAlert1(); } else{ ++j; TextView txtque = (TextView) findViewById(R.id.que_txt); txtque.setText(ques1.get(j)); ++k; btn_practice1.setText(answ1.get((k*4)+0)); btn_practice2.setText(answ1.get((k*4)+1)); btn_practice3.setText(answ1.get((k*4)+2)); btn_practice4.setText(answ1.get((k*4)+3)); } btn_practicerg.clearCheck(); btn_practicerg.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { RadioButton radioButton = (RadioButton) findViewById(checkedId); String temp = radioButton.getText().toString(); l++; if (temp.equals(crrtans.get(l))){ TextView txtRadio = (TextView) findViewById(R.id.rdtxt); txtRadio.setText("" + radioButton.getText() + " IS CORRECT"); txtRadio.setTextColor(Color.parseColor("#008000")); }else{ //RadioButton radioButton1 = (RadioButton) findViewById(checkedId); // Toast.makeText(Question.this, "" + radioButton.getText(), 2000).show(); TextView txtRadio = (TextView) findViewById(R.id.rdtxt); txtRadio.setText("" + radioButton.getText() + " IS INCORRECT"); txtRadio.setTextColor(Color.parseColor("#FF0000")); } } }); } }); Button previousbtn = (Button) findViewById(R.id.prv_btn); previousbtn.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v){ if (j <= 0) { Toast.makeText(Question.this, "First Question",Toast.LENGTH_SHORT).show(); } else { --j; TextView txtque = (TextView) findViewById(R.id.que_txt); txtque.setText(ques1.get(j)); --k; btn_practice1.setText(answ1.get((k*4)+0)); btn_practice2.setText(answ1.get((k*4)+1)); btn_practice3.setText(answ1.get((k*4)+2)); btn_practice4.setText(answ1.get((k*4)+3)); } btn_practicerg.clearCheck(); btn_practicerg.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { RadioButton radioButton = (RadioButton) findViewById(checkedId); String temp = radioButton.getText().toString(); l--; if (temp.equals(crrtans.get(l))){ TextView txtRadio = (TextView) findViewById(R.id.rdtxt); txtRadio.setText("" + radioButton.getText() + " IS CORRECT"); txtRadio.setTextColor(Color.parseColor("#008000")); }else{ //RadioButton radioButton1 = (RadioButton) findViewById(checkedId); // Toast.makeText(Question.this, "" + radioButton.getText(), 2000).show(); TextView txtRadio = (TextView) findViewById(R.id.rdtxt); txtRadio.setText("" + radioButton.getText() + " IS INCORRECT"); txtRadio.setTextColor(Color.parseColor("#FF0000")); } } }); } }); }
logcat的
E/AndroidRuntime(893): FATAL EXCEPTION: main
E/AndroidRuntime(893): java.lang.ArrayIndexOutOfBoundsException
E/AndroidRuntime(893): at java.util.ArrayList.get(ArrayList.java:313)
E/AndroidRuntime(893): at
com.example.finalpractice.Question$LoadQuestions$2$1.onCheckedChanged(Question.java:243)
E/AndroidRuntime(893): at
android.widget.RadioGroup.setCheckedId(RadioGroup.java:172)
E/AndroidRuntime(893): at android.widget.RadioGroup.access$600(RadioGroup.java:52)
E/AndroidRuntime(893): at
android.widget.RadioGroup$CheckedStateTracker.onCheckedChanged(RadioGroup.java:342)
E/AndroidRuntime(893): at
android.widget.CompoundButton.setChecked(CompoundButton.java:127)
E/AndroidRuntime(893): at
android.widget.CompoundButton.toggle(CompoundButton.java:86)
E/AndroidRuntime(893): at android.widget.RadioButton.toggle(RadioButton.java:72)
E/AndroidRuntime(893): at
android.widget.CompoundButton.performClick(CompoundButton.java:98)
E/AndroidRuntime(893): at android.view.View$PerformClick.run(View.java:9080)
E/AndroidRuntime(893): at android.os.Handler.handleCallback(Handler.java:587)
E/AndroidRuntime(893): at android.os.Handler.dispatchMessage(Handler.java:92)
在我的情况下,我有一个名为rb
的无线电组和2个单选按钮(qazxsw poi,qazxsw poi)。
所以,这是我使用rbY
的实现:
rbN
我发现这是有用的onClickListener
。这是一个自定义单选按钮,允许您取消选择已经检查过的选项。
要选中/取消选中单选按钮,您可以使用final RadioGroup rb = (RadioGroup) convertView.findViewById(R.id.creditcards);
RadioButton rbY = (RadioButton) convertView.findViewById(R.id.radioButton);
RadioButton rbN = (RadioButton) convertView.findViewById(R.id.radioButton2);
final View finalConvertView = convertView;
rbY.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int selected = rb.getCheckedRadioButtonId();
RadioButton rbYes = (RadioButton) finalConvertView.findViewById(selected);
RadioButton rbN = (RadioButton) finalConvertView.findViewById(R.id.radioButton2);
if (rbYes.isSelected()) {
rbYes.setSelected(false);
rb.clearCheck();
rb.clearChildFocus(rbYes);
} else {
rbYes.setSelected(true);
}
}
});
rbN.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int selected = rb.getCheckedRadioButtonId();
RadioButton rbNo = (RadioButton) finalConvertView.findViewById(selected);
if (rbNo.isSelected()) {
rbNo.setSelected(false);
rb.clearCheck();
rb.clearChildFocus(rbNo);
}
else {
rbNo.setSelected(true);
}
}
});
(或取消选中false)
更改你的代码,比如找到onCreate()中所有单选按钮的id,并将其作为全局...
在下一个按钮的onClickListener中写入radioButton.setChecked(false);对于您使用的所有单选按钮...并删除行btn_practicerg.clearCheck();
我试过这样工作正常..
创建clearRadioButtons方法并调用onCreate。
https://github.com/ragunathjawahar/deselectable-radio-button
以上是关于如何取消选中或清除单选按钮组?的主要内容,如果未能解决你的问题,请参考以下文章