2016-09-05 4 views
0

Ich suche nach einer besseren Möglichkeit, meine CheckBoxen zu verstecken. Es gibt jeweils 2 und 5 Checkboxen (5 Antwort CheckBoxen und 5 Lösung CheckBoxen).Android - Verbergen von CheckBoxen, wenn der Wert leer ist

My CheckBoxes

ich fülle die Antwort Arraylist dynamisch mit den Werten meiner Datenbank. Dann überprüfe ich für jeden Fall, ob die Liste einen Wert hat. Wenn es einen Wert gibt, erhält die CheckBox den Antworttext, wenn nicht der Text Null ist. Danach möchte ich alle Antwort-Checkboxen mit leeren Werten ausblenden. Dazu muss ich die zugehörigen CheckBoxen lösen. Dies ist die Art und Weise meiner Umsetzung:

if (question.getQuestiontype() == 2) { 
      cb_answer1.setText(answerList.size() >= 1 ? answerList.get(0).getAnswertext() : null); 
      cb_answer2.setText(answerList.size() >= 2 ? answerList.get(1).getAnswertext() : null); 
      cb_answer3.setText(answerList.size() >= 3 ? answerList.get(2).getAnswertext() : null); 
      cb_answer4.setText(answerList.size() >= 4 ? answerList.get(3).getAnswertext() : null); 
      cb_answer5.setText(answerList.size() >= 5 ? answerList.get(4).getAnswertext() : null); 

      if (cb_answer3.getText().toString().isEmpty()) { 
       cb_answer3.setVisibility(View.INVISIBLE); 
       cb_answer4.setVisibility(View.INVISIBLE); 
       cb_answer5.setVisibility(View.INVISIBLE); 
       cb_solution3.setVisibility(View.INVISIBLE); 
       cb_solution4.setVisibility(View.INVISIBLE); 
       cb_solution5.setVisibility(View.INVISIBLE); 
      } else { 
       cb_answer3.setVisibility(View.VISIBLE); 
       cb_answer4.setVisibility(View.VISIBLE); 
       cb_answer5.setVisibility(View.VISIBLE); 
       cb_solution3.setVisibility(View.VISIBLE); 
       cb_solution4.setVisibility(View.VISIBLE); 
       cb_solution5.setVisibility(View.VISIBLE); 
      } 

      if (cb_answer4.getText().toString().isEmpty()) { 
       cb_answer4.setVisibility(View.INVISIBLE); 
       cb_answer5.setVisibility(View.INVISIBLE); 
       cb_solution4.setVisibility(View.INVISIBLE); 
       cb_solution5.setVisibility(View.INVISIBLE); 
      } else { 
       cb_answer4.setVisibility(View.VISIBLE); 
       cb_answer5.setVisibility(View.VISIBLE); 
       cb_solution4.setVisibility(View.VISIBLE); 
       cb_solution5.setVisibility(View.VISIBLE); 
      } 

      if (cb_answer5.getText().toString().isEmpty()) { 
       cb_answer5.setVisibility(View.INVISIBLE); 
       cb_solution5.setVisibility(View.INVISIBLE); 
      } else { 
       cb_answer5.setVisibility(View.VISIBLE); 
       cb_solution5.setVisibility(View.VISIBLE); 
      } 

      for (CheckBox cb : answerCheckBoxes) { 
       cb.setEnabled(true); 
      } 
     } 

Es sieht ein wenig umständlich, und ich denke, es ist nicht der beste Weg, dies zu handhaben. Können Sie mir einen Rat geben?

Antwort

1

vor allem, wenn I'be gut verstanden, ich glaube, Sie Ihren Code vereinfachen könnte separing cbs Logik wie hier:

if (question.getQuestiontype() == 2)

{ 
    cb_answer1.setText(answerList.size() >= 1 ? answerList.get(0).getAnswertext() : null); 
    cb_answer2.setText(answerList.size() >= 2 ? answerList.get(1).getAnswertext() : null); 
    cb_answer3.setText(answerList.size() >= 3 ? answerList.get(2).getAnswertext() : null); 
    cb_answer4.setText(answerList.size() >= 4 ? answerList.get(3).getAnswertext() : null); 
    cb_answer5.setText(answerList.size() >= 5 ? answerList.get(4).getAnswertext() : null); 

    if (cb_answer3.getText().toString().isEmpty()) { 
     cb_answer3.setVisibility(View.INVISIBLE); 
     cb_solution3.setVisibility(View.INVISIBLE); 
    } else { 
     cb_answer3.setVisibility(View.VISIBLE); 
     cb_solution3.setVisibility(View.VISIBLE); 
    } 

    if (cb_answer4.getText().toString().isEmpty()) { 
     cb_answer4.setVisibility(View.INVISIBLE); 
     cb_solution4.setVisibility(View.INVISIBLE); 
    } else { 
     cb_answer4.setVisibility(View.VISIBLE); 
     cb_solution4.setVisibility(View.VISIBLE); 
    } 

    if (cb_answer5.getText().toString().isEmpty()) { 
     cb_answer5.setVisibility(View.INVISIBLE); 
     cb_solution5.setVisibility(View.INVISIBLE); 
    } else { 
     cb_answer5.setVisibility(View.VISIBLE); 
     cb_solution5.setVisibility(View.VISIBLE); 
    } 

    for (CheckBox cb : answerCheckBoxes) { 
     cb.setEnabled(true); 
    } 
} 

Wenn Sie sich diesen Code ansehen, können Sie sehen, dass Sie die gleichen Operationen für verschiedene Antwort- und Antwort-cbs durchführen. So könnte man eine parametrisierte Methode wie folgt erstellen:

if (question.getQuestiontype() == 2) {

cb_answer1.setText(answerList.size() >= 1 ? answerList.get(0).getAnswertext() : null); 
    cb_answer2.setText(answerList.size() >= 2 ? answerList.get(1).getAnswertext() : null); 
    cb_answer3.setText(answerList.size() >= 3 ? answerList.get(2).getAnswertext() : null); 
    cb_answer4.setText(answerList.size() >= 4 ? answerList.get(3).getAnswertext() : null); 
    cb_answer5.setText(answerList.size() >= 5 ? answerList.get(4).getAnswertext() : null); 

    this.setCheckboxVisibility(cb_answer3, cb_solution3); 
    this.setCheckboxVisibility(cb_answer4, cb_solution4); 
    this.setCheckboxVisibility(cb_answer5, cb_solution5); 

    for (CheckBox cb : answerCheckBoxes) { 
     cb.setEnabled(true); 
    } 
} 


private void setCheckboxVisibility(Checkbox answer, Checkbox solution) { 

    if (answer.getText().toString().isEmpty()) { 
     answer.setVisibility(View.INVISIBLE); 
     solution.setVisibility(View.INVISIBLE); 
    } else { 
     answer.setVisibility(View.VISIBLE); 
     solution.setVisibility(View.VISIBLE); 
    } 
} 

Dann können Sie diese Lösung kombinieren mit, dass gepostet von TWL

1

Wie wäre es mit einer Reihe von Ansichten?

Beispiel:

CheckBox[] answers = new CheckBox[] {cb_answer1, cb_answer2, cb_answer3, cb_answer4, cb_answer5}; 
for (int i = answerList.size(); i < answers.length; i++) { 
    answers[i].setVisibility(View.INVISIBLE); 
} 

fühlen Sie sich frei auf, dass zu erweitern!

Verwandte Themen