2016-11-15 10 views
0

ダイアログを使用して、Androidで一連のクイズを表示しています。ユーザーがTrueまたはFalseと答えると、次のクイズを表示したいと思います。クリック後にカスタム表示されたダイアログの内容を更新する

私はカスタムレイアウトを使用していると私は、次のコードでそれを制御しています:

public void showQuizDialog() { 
    View v; 
    TextView question; 
    // Textview showing Quiz 1 out of 3 
    TextView numQ; 
    NetworkImageView image; 
    ImageLoader imageLoader = AppController.getInstance().getImageLoader(); 

    // The coordinator keeps track of the game 
    coordinator.setQuizStarted(); 
    // Get the quiz using the coordinator 
    Quiz qX = coordinator.getQuiz(); 
    final String answer = qX.getAnswer(); 
    final String quizTracker = coordinator.getTracker(); 

    // Create an instance of the dialog fragment 
    AlertDialog.Builder quiz = new AlertDialog.Builder(MyActivity.this); 

    LayoutInflater inflater = MyActivity.this.getLayoutInflater(); 

    // Inflate and set the layout for the dialog 
    v = inflater.inflate(R.layout.quiz_layout,null); 

    // Set the question 
    question = (TextView) v.findViewById(R.id.content_quiz); 
    question.setText(qX.getQuestion()); 

    // Set current number of question 
    numQ = (TextView) v.findViewById(R.id.number_quiz); 
    numQ.setText(quizTracker); 

    // Retrieves the image from url 
    image = (NetworkImageView) v.findViewById(R.id.thumbnail_quiz); 
    if (imageLoader == null) 
     imageLoader = AppController.getInstance().getImageLoader(); 
    String urlImage = getCompleteUrl(CODE_QUIZ_IMG); 
    urlImage += qX.getImg(); 
    image.setImageUrl(urlImage, imageLoader); 


    quiz.setPositiveButton("True", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       // User clicked OK button 
       if (answer.equals(quiz_true)) { 
        coordinator.notifyCorrectQuizNum(); 
        Log.d(QUIZ_DIALOG,"\t\tCorrect answer! it was true"); 
       } 
       coordinator.setQuizEnded(true); 
       coordinator.updateQuizLeft(); 
      } 
     }) 
     .setNegativeButton("False", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         // User clicked to False btn 

         if (answer.equals(quiz_false)){ 
          Log.d(QUIZ_DIALOG,"\t\tCorrect Answer!! It was false"); 
          coordinator.notifyCorrectQuizNum(); 
         } 
         coordinator.setQuizEnded(true); 
         coordinator.updateQuizLeft(); 
        } 
       }); 

    quiz.setView(v); 

    final AlertDialog dialog = quiz.create(); 
    dialog.setCancelable(false); 
    dialog.setCanceledOnTouchOutside(false); 
    dialog.show(); 
} 

はのは100の表示するクイズ、残りのクイズの数を返しコーディネータークラスのメソッドがあるとしましょう。

ので、コール

coordinator.setQuizEnded(true); 
coordinator.updateQuizLeft(); 

coordinator.getQuizLeft()後に99を返し、coordinator.getQuiz()は、次のクイズを指します。

ダイアログボックスを閉じずにTextView questionnumQを更新するにはどうすればよいですか?最初に呼ばれ、任意のコンテンツせずにダイアログを作成している)

setupQuizDialog(:

+0

ありがとう@Andriy Omelchenkoがタグを編集しました! – UserK

答えて

3

はこのような何かを試してみてください。

loadNewQuestionIntoDialog()ダイアログのコンテンツを新しい質問で最新表示するために継続的に呼び出されます。

public void setupQuizDialog() { 
    LayoutInflater inflater = MyActivity.this.getLayoutInflater(); 

    // Inflate and set the layout for the dialog 
    View v = inflater.inflate(R.layout.quiz_layout,null); 

    AlertDialog.Builder quiz = new AlertDialog.Builder(MyActivity.this) 
      .setPositiveButton("True", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        //Nothing, will replace later 
       } 
      }) 
      .setNegativeButton("False", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        //Nothing, will replace later 
       } 
      }); 
    quiz.setView(v); 

    final AlertDialog dialog = quiz.create(); 
    dialog.setCancelable(false); 
    dialog.setCanceledOnTouchOutside(false); 
    dialog.show(); 
    loadNewQuestionIntoDialog(dialog, 100); 
} 

public void loadNewQuestionIntoDialog(final AlertDialog dialog, final int questionNumber){ 

    ImageLoader imageLoader = AppController.getInstance().getImageLoader(); 
    // The coordinator keeps track of the game 
    coordinator.setQuizStarted(); 
    // Get the quiz using the coordinator 
    final String answer = qX.getAnswer(); 
    final String quizTracker = coordinator.getTracker(); 

    TextView question = (TextView) dialog.findViewById(R.id.content_quiz); 
    question.setText(qX.getQuestion()); 

    TextView numQ = (TextView) dialog.findViewById(R.id.number_quiz); 
    numQ.setText(quizTracker); 

    // Retrieves the image from url 
    NetworkImageView image = (NetworkImageView) dialog.findViewById(R.id.thumbnail_quiz); 
    if (imageLoader == null) 
     imageLoader = AppController.getInstance().getImageLoader(); 
    String urlImage = getCompleteUrl(CODE_QUIZ_IMG); 
    urlImage += qX.getImg(); 
    image.setImageUrl(urlImage, imageLoader); 

    dialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // User clicked OK button 
      if (answer.equals(quiz_true)) { 
       coordinator.notifyCorrectQuizNum(); 
       Log.d(QUIZ_DIALOG,"\t\tCorrect answer! it was true"); 
      } 
      coordinator.setQuizEnded(true); 
      if(questionNumber > 0) 
       loadNewQuestionIntoDialog(dialog, coordinator.updateQuizLeft()); 
     } 
    }); 
    dialog.getButton(DialogInterface.BUTTON_NEGATIVE).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // User clicked to False btn 

      if (answer.equals(quiz_false)){ 
       Log.d(QUIZ_DIALOG,"\t\tCorrect Answer!! It was false"); 
       coordinator.notifyCorrectQuizNum(); 
      } 
      coordinator.setQuizEnded(true); 
      if(questionNumber > 0) 
       loadNewQuestionIntoDialog(dialog, coordinator.updateQuizLeft()); 
     } 
    }); 

} 
+0

答えをありがとう!ダイアログのコンポーネントが正しく更新される – UserK

関連する問題