2013-04-11 71 views
15

Tôi là người mới đối với miền Android ..làm cách nào tôi có thể bỏ chọn hoặc đặt lại nút radio?

Tôi đang phát triển một ứng dụng dựa trên bài kiểm tra. Sẽ có 1 câu hỏi và 4 tùy chọn (nút radio) khi người dùng mở nút radio ứng dụng này sẽ được bỏ chọn nhưng vấn đề xuất hiện khi người dùng trả lời 1 nhiệm vụ và khi anh ta đi cho nút radio nhiệm vụ tiếp theo sẽ được kiểm tra. Tôi muốn bỏ chọn/thiết lập lại các nút radio cho mỗi câu hỏi. Làm thế nào tôi có thể làm điều đó?

Thank trước ...

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)group. findViewById(checkedId); //line 262 
       String temp = radioButton.getText().toString(); 
       switch(btn_practicerg.getCheckedRadioButtonId()){ 
       case R.id.RB1: 
        if (btn_practice1.isChecked()){ 
         btn_practice2.setChecked(false); 
         btn_practice3.setChecked(false); 
         btn_practice4.setChecked(false); 
        } 
        break; 
       case R.id.RB2: 
        if (btn_practice2.isChecked()){ 
         btn_practice1.setChecked(false); 
         btn_practice3.setChecked(false); 
         btn_practice4.setChecked(false); 
        }      
        break; 
       case R.id.RB3: 
        if (btn_practice3.isChecked()){ 
         btn_practice1.setChecked(false); 
         btn_practice2.setChecked(false); 
         btn_practice4.setChecked(false); 
        } 
        break; 
       case R.id.RB4: 
        if (btn_practice4.isChecked()){ 
         btn_practice1.setChecked(false); 
         btn_practice2.setChecked(false); 
         btn_practice3.setChecked(false); 
        }     
        break; 
       default: 
        btn_practice1.setChecked(false); 
        btn_practice2.setChecked(false); 
        btn_practice3.setChecked(false); 
        btn_practice4.setChecked(false); 
       } 
     ImageView nextBtn = (ImageView) findViewById(R.id.nxt_btn); 
    nextBtn.setOnClickListener(new Button.OnClickListener(){ 
    public void onClick(View v){ 
     btn_practicerg.clearCheck(); //line 355 
       } 
      }); 

Logcat

 E/AndroidRuntime(729):at  
     com.example.TEENEINSTIEN.Question$LoadQuestions$2.onCheckedChanged(Question.java:262) 
     E/AndroidRuntime(729):at android.widget.RadioGroup.setCheckedId(RadioGroup.java:172) 
     E/AndroidRuntime(729):at android.widget.RadioGroup.check(RadioGroup.java:166) 
     E/AndroidRuntime(729):at android.widget.RadioGroup.clearCheck(RadioGroup.java:205) 
     E/AndroidRuntime(729):at 
     com.example.TEENEINSTIEN.Question$LoadQuestions$3.onClick(Question.java:355) 
     E/AndroidRuntime(729):at android.view.View.performClick(View.java:2485) 
     E/AndroidRuntime(729):at android.view.View$PerformClick.run(View.java:9080) 

tôi cố gắng như thế này, nhưng tôi không thể có thể bỏ chọn ..

+1

tôi nghĩ rằng thực sự bạn cần phải sử dụng RadioGroup nếu có thì kiểm tra các liên kết http://developer.android.com/reference/android/widget/RadioGroup.html http : //stackoverflow.com/questions/6780981/android-radio-group-question –

+0

Trước tiên, bạn nên cân nhắc sử dụng Rad ioGroup để tránh phải "bỏ chọn" chúng theo cách thủ công. – damian

+0

RadioGroup chỉ tôi đã sử dụng, btn_practicerg nhóm radio duy nhất của nó trong mã của tôi ... –

Trả lời

15

Tôi nghĩ rằng e vấn đề là với btn_practicerg đối tượng tức là nếu bạn đang tạo mới mọi đối tượng RadioGroup hiển thị câu hỏi mới thì bạn phải thực hiện RadioGroup.clearCheck() trên mới btn_practicerg đối tượng thay vì một cũ mà tôi nghĩ rằng bạn đang làm.

và nhiều hơn nữa bettrly làm folliwing:

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_practice1.setChecked(false); 
    btn_practice2.setChecked(false); 
    btn_practice3.setChecked(false); 
    btn_practice4.setChecked(false); 

để bỏ chọn tất cả các nút trong đầu. Tôi hy vọng điều này sẽ giải quyết vấn đề của bạn ..

+1

Bỏ chọn của nó, nhưng một vấn đề, trong câu hỏi thứ nhất tôi chọn option1 có nghĩa là option1 tương tự nếu chọn trong nhiệm vụ thứ 2 của nó không đánh dấu hoặc không chọn tùy chọn khác tôi chọn ... –

35

Đặt tất cả các nút của bạn trong một RadioGroup khi bạn cần xóa tất cả, hãy sử dụng RadioGroup.clearCheck();

+1

Tôi đã sử dụng điều này, nó ném lỗi. Tôi không thể rõ ràng. nhìn thấy trong mã của tôi .. –

+0

bạn đã nhìn thấy logcat của tôi .. nó ném lỗi như thế này .. –

+0

đây phải là câu trả lời được chấp nhận vì nó làm giảm mã boilerplate và cải thiện khả năng đọc. –

2

Hãy thử thế này, cùng một vấn đề đã được giải quyết với giải pháp này:

  1. bộ onclick phương pháp để tất cả 4 radiobutton nói radio1Clicked, radio2Clicked & vân vân
  2. trong phương pháp onclick tương ứng thêm bên dưới mã:

    public void radio1Clicked(View view) 
    { 
        // Note that I have unchecked radiobuttons except the one 
        // which is clicked/checked by user 
        radio2Button.setChecked(false); 
        radio3Button.setChecked(false); 
        radio4Button.setChecked(false); 
    } 
    
  3. simillarly làm cho radiob còn lại uttons. Hy vọng điều này sẽ giải quyết vấn đề của bạn.

Vui lòng hỏi bất kỳ thắc mắc nào về giải pháp.

+0

Không hoạt động trong bộ điều hợp .. – Sam

1

Tôi chỉ có một nút radio và tôi thực sự không muốn tạo nhóm nút radio. Kiểm tra onClick và if và else không hoạt động để kiểm tra và bỏ chọn nó theo cách thủ công. Tôi đã đọc một vài bài đăng với người nghe onRadioButtonClick, v.v.

Trước tiên, tôi đã cố gắng trao đổi với hộp kiểm- cùng một vấn đề. Sau đó, tôi đã thử CheckedTextView và những gì bạn biết, nó thực sự làm việc như một chuyển đổi.Vì vậy, về cơ bản tôi đã thêm một nút radio sau đó rời khỏi văn bản trống, thêm checkedTextView bên cạnh nó (chồng chéo) sau đó liên kết các chức năng onClick của checkedTextView đến một chức năng chuyển đổi ->

public void toggle(View view) 
{ 
    if(checkedTextView.isChecked()) 
    { 
     checkedTextView.setChecked(false); 
     actualRadioBtn.setChecked(false); 
    } 
    else 
    { 
     checkedTextView.setChecked(true); 
     actualRadioBtn.setChecked(true); 
    } 
} 

Sau đó, trong chức năng của bạn, nơi bạn kiểm tra nếu đó là nút radio được chọn bạn chỉ có thể sử dụng

if(actualRadioBtn.isChecked()).... 
Các vấn đề liên quan