-1

J'ai passé quelques heures pour essayer de mettre à jour le texte dans la boîte de dialogue, mais a échoué. Lorsque l'option est cliquée, une nouvelle boîte de dialogue apparaît et dans la boîte de dialogue, il y a des textviews et un bouton, lorsque je clique sur le bouton, la textview sera mise à jour.Mise à jour Android TextView dialogue intérieur dans runOnUiThread

Voici le code lié au bouton d'écoute onClick:

start.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       for (int i = 0; i < 50 ; i ++){ 

        final String currentNum = String.valueOf(i + 1); 

        Thread t = new Thread() { 
          @Override 
          public void run() { 
          runOnUiThread(new Runnable() { 
           @Override 
           public void run() { 
            try { 
            Thread.sleep(1000); 
           } catch (InterruptedException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
           } 
            System.out.println(currentNum); //it is fine 
            currentNum.setText(currentNum); //it is the problem, the setText only work when the for loop is finished. 
           } 
          }); 
          } 
         }; 

         t.start(); 

       } 
      } 
     }); 

S'il vous plaît laissez-moi savoir si vous avez besoin de plus amples informations. Merci beaucoup d'avance!

// il est un OptionMenu

case R.id.action_refresh: 
    final TextView currentNum; 
    final ImageButton start; 

    String currentNum = Integer.toString(songList.size()); 

    final Dialog lyricsAnalysis = new Dialog(this,R.style.cust_dialog); 
    lyricsAnalysis.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    lyricsAnalysis.setContentView(R.layout.analysis); 
    lyricsAnalysis.setCancelable(true); //back button to cancel 
    lyricsAnalysis.setCanceledOnTouchOutside(true); 


    start = (ImageButton) lyricsAnalysis.findViewById(R.id.start); 

    //first value 
    currentNum.setText(String.valueOf(currentNum)); 

    start.setOnClickListener(new OnClickListener() { 


     @Override 
     public void onClick(View arg0) { 
      for (int i = 0; i < 50 ; i ++){ 

       try { 
        Thread.sleep(1000); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

       updateTextView(lyricsAnalysis,i); 

      } 
     } 
    });  
    lyricsAnalysis.show(); 
    lyricsAnalysis.getWindow().setLayout(600, 1000); 
    break; 
} 
return super.onOptionsItemSelected(item); } 
public void updateTextView(Dialog dialog, int i) { 
    final TextView currentNum = (TextView) dialog.findViewById(R.id.currentNum); 
    currentNum.setText(Stri`enter code here`ng.valueOf(i)); 
    //return; 
} 
+0

Pouvez-vous s'il vous plaît me dire le but de fil ayant dans la méthode onClick? – Srinivasan

+0

quelle est l'utilisation du fil ici éviter cela. –

+0

Comme si je n'avais pas le nouveau thread, le textView ne sera pas mis à jour à chaque fois. Et le mettra à jour quand la boucle for est terminée. Et tout ce que j'ai essayé est que, le System.out.println (currentNum) est bien, il imprime de 0 à 49, cependant, le setText ne fonctionnera que lorsque la boucle for est finie et changer le textView en (50) directement ... – andy

Répondre

0

Essayez cette méthode. Cela peut vous aider. C'est un travail pour moi. (Mais je ne suis pas utiliser ce dans le dialogue)

public void updateTextView(String toThis) { 

    TextView textView = (TextView) findViewById(R.id.textView); 
    textView.setText(toThis); 

    //return; 
} 
+0

Le même résultat que la méthode ci-dessus, le setText sera changé lorsque la boucle for est terminée..why :( – andy

+0

Où vous initialisez 'currentNum' Pouvez-vous afficher le code de dialogue complet? – Vijay

+0

Je viens d'ajouter le code complet de dialogue dans ce qui précède, merci – andy

0

essayer comme ça

int elapsedtime=0; 
    boolean isTimerRunning=false; 

Timer timerr; 

intérieur onCreate

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    //declare your textview here; 
    timerr=new Timer(); 
       startTimer(); 
} 

    /* 
    * timer for displaying message bubble 
    */ 
    protected static void startTimer() { 
     isTimerRunning = true; 
     elapsedtime = 0; 
     // recordingseek.setProgress(0); 

     timerr.scheduleAtFixedRate(new TimerTask() { 
      public void run() { 

       // increase every sec 

elapsedtime++; 


        mmHandler.obtainMessage(1).sendToTarget(); 
        System.out.println("recording time" + elapsedtime); 

       if(elapsedtime==50) 
         timerr.cancel(); 


      } 
     }, 1000, 2000); 
    }; 

    public static Handler mmHandler = new Handler() { 

     public void handleMessage(Message msg) { 



      textview.setText(elapsedtime); 



} 
    }; 




    } 
}; 
+0

je votre code, en plus, ajouter try { \t \t \t \t \t \t \t Thread.sleep (1000); \t \t \t \t \t \t} catch (e InterruptedException) { \t \t \t \t \t \t \t // TODO bloc catch généré automatiquement \t \t \t \t \t \t \t e.printStackTrace(); \t \t \t \t \t \t} et la "currentNum.setText (currentNum);" ne fonctionne que lorsque I = 50 ... – andy