Если щелкнуть разные радиокнопки, будет сохранено только значение последней - PullRequest
0 голосов
/ 27 декабря 2018

Это часть 2 приложения викторины, которое я создал.Первая часть работает нормально, но в этой части, когда я нажимаю переключатель, счет просто складывается.Например, если я щелкну переключатель 2, а затем нажмите кнопку 3, счет станет 3 вместо 2 *.

Если я попытаюсь переместить getAnswer () в OnClickListener в кнопке, еслиЯ нажимаю переключатель, чтобы перейти к следующему действию, пока я не нажму другой переключатель.

   protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_part2);


   firebaseAuth = FirebaseAuth.getInstance();
   firebaseDatabase = FirebaseDatabase.getInstance();

   gadChoice1 = (RadioButton)findViewById(R.id.part2Choice1);
   gadChoice2 = (RadioButton)findViewById(R.id.part2Choice2);
   gadChoice3 = (RadioButton)findViewById(R.id.part2Choice3);
   gadChoice4 = (RadioButton)findViewById(R.id.part2Choice4);
   btnNext = (Button)findViewById(R.id.btnNext);

   getAnswer();

   DatabaseReference myRef = firebaseDatabase.getReference(firebaseAuth.getUid()).child("test");
   myRef.addValueEventListener(new ValueEventListener() {
       @Override
       public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
           UserHistory userHistory = dataSnapshot.getValue(UserHistory.class);
           anxHistory = userHistory.getAnx();
           depHistory = userHistory.getDep();

       }

       @Override
       public void onCancelled(@NonNull DatabaseError databaseError) {
           Toast.makeText(Part2.this, databaseError.getCode(), Toast.LENGTH_SHORT).show();
       }
   });

   btnNext.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {


                   anxValue = anxHistory + anx;

                   final DatabaseReference myRef = firebaseDatabase.getReference(firebaseAuth.getUid()).child("test");

                   myRef.addListenerForSingleValueEvent(new ValueEventListener() {
                       @Override
                       public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                           HashMap<String, Object> result = new HashMap<>();
                           result.put("anx", anxValue);
                           myRef.updateChildren(result);
                       }

                       @Override
                       public void onCancelled(@NonNull DatabaseError databaseError) {
                           System.out.println("The read failed: " + databaseError.getMessage());
                       }
                   });

           if(dep > anx){
               Intent myIntent = new Intent(Part2.this, Part3.class);
               startActivity(myIntent);
               finish();
           }else if (anx > dep){
               Intent myIntent = new Intent(Part2.this, Part3.class);
               startActivity(myIntent);
               finish();
           }
       }
   });   }

   private void getAnswer() {
   radioGroup2 = (RadioGroup) findViewById(R.id.radioGroup2);
   radioGroup2.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

       @Override
       public void onCheckedChanged(RadioGroup group, int checkedId) {
           if (checkedId == R.id.part2Choice2) {
               anx++ ;
           } else if (checkedId == R.id.part2Choice3)  {
               anx = anx + 2 ;
           }
           else if (checkedId == R.id.part2Choice4) {
               anx = anx + 3;
           }


       }
   });

   }

Я ожидаю, что вывод будет значением выбранной радиокнопки, а не суммой радиокнопки, которую я нажал.Например, если я нажал кнопку радио A (0), кнопку радио B (1), кнопку радио C (2), выходной сигнал, который я запишу, равен 2.

1 Ответ

0 голосов
/ 27 декабря 2018

Вы не можете справиться с этим внутри onCheckedChanged, потому что оно будет увеличиваться каждый раз, когда вы меняете выбранное.Вы можете проверить выбранный, нажав btnNext:

int selectedItem = radioGroup2.getCheckedRadioButtonId();
if (selectedItem == R.id.part2Choice2) {
    anx++ ;
} else if (checkedId == R.id.part2Choice3)  {
    anx = anx + 2 ;
}
else if (checkedId == R.id.part2Choice4) {
    anx = anx + 3;
}
...