0

私はクイズアプリをやっています.4つのラジオボタンを持つラジオグループがあり、次のボタンが1つあります.

最初の質問と回答を表示している間、問題はありません。ユーザーが次に与えるときに、ラジオグループのチェックを外す必要があります。これを実装する方法は?

ユーザーがオプションを選択すると、答えが正しいか間違っているかを確認する必要があります。正しい答えを配列に保存しました。ユーザーがオプションを切り替えると、トグル ボタンにエラーが表示されます。これを実装する方法は?

   btn_practicerg.setOnCheckedChangeListener(new OnCheckedChangeListener(){
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) { 
                RadioButton radioButton = (RadioButton)group. findViewById(checkedId);
                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;
                }
                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{
              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){
         if (j == ques1.size() -1) {
                showAlert1();
            }
          else{ 
            ++j;
            ++num;
            TextView txtque = (TextView) findViewById(R.id.que_txt); 
            txtque.setText("Q" + num +ques1.get(j));
                        }      
         });
4

2 に答える 2

1

問題はpublic void onCheckedChanged(RadioGroup group, int checkedId) 、checkedId に基づいてチェック済みラジオ ボタンのインスタンスを作成している内部にありますclearCheck。実際にはclearCheck、次のボタンがクリックされたときにラジオ グループを呼び出すと、onCheckedChangedイベントが発生し、null の checkedId が取得されます。その結果、これを行うと、null ラジオ ボタンが表示されます。RadioButton radioButton = (RadioButton)group. findViewById(checkedId);

EDIT(より良い説明):

このメソッドをクラスに追加します。

private void doProcessingWithRadioButton(int checkedId)
    {
        RadioButton radioButton = (RadioButton)group. findViewById(checkedId);
        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;
        }
        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{
          TextView txtRadio = (TextView) findViewById(R.id.rdtxt); 
          txtRadio.setText("" + radioButton.getText() + "is INCORRECT");
          txtRadio.setTextColor(Color.parseColor("#FF0000")); 
       }
    }

コードを次のように変更します。

btn_practicerg.setOnCheckedChangeListener(new OnCheckedChangeListener(){
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) { 
            if(checkedId != -1)
            {
                doProcessingWithRadioButton(checkedId);
            }
        });

これが役に立ったことを願っています。問題が解決した場合は、これを回答としてマークすることを忘れないでください。

于 2013-02-13T08:10:07.607 に答える