2013-01-18 4 views
0

Cela semble être un problème très simple, mais pour une raison quelconque, je me trouve incapable de trouver des réponses qui fonctionnent. Ce que j'ai est 2 boutons avec un empilé sur l'autre dans une mise en page de cadre, et quand le bouton 1 est cliqué, il devient invisible et Button2 apparaît. Ce que j'essaie de faire arriver est après quelques secondes Button2 devient automatiquement invisible et Button1 est à nouveau visible. Voici le petit peu de code que j'ai. Toute aide serait grandement appréciée!Bouton de bouton Android Invisible sans clic

button1 = (Button)findViewById(R.id.button1); 
button2 = (Button)findViewById(R.id.button2); 


     button1.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       button1.setVisibility(Button.GONE); 
       button2.setVisibility(Button.VISIBLE); 

      } 
     }); 
+0

http://stackoverflow.com/questions/1877417/how-to-set-a-timer-in-android – Simon

Répondre

4

Une solution plus simple que beaucoup qui sont proposés ici serait la suivante:

button1 = (Button)findViewById(R.id.button1); 
button2 = (Button)findViewById(R.id.button2); 


button1.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     button1.setVisibility(Button.GONE); 
     button2.setVisibility(Button.VISIBLE); 
     button1.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       button1.setVisibility(View.VISIBLE); 
       button2.setVisibility(View.GONE); 
      } 
     }, 2000); 
    } 
}); 
+0

Monsieur, vous êtes géniaux! Merci beaucoup qui l'a fait parfaitement! – BossWalrus

0

Il existe de nombreuses façons de le faire.

Vous devez mettre en œuvre un handler dans votre activité (lien vers le thread d'interface utilisateur) et après un sendMessageDelayed d'un nouveau thread

Edit: Scott W. a droite: Dans la même logique, vous pouvez utiliser la commande

PostDelayed(Your_runnable, time_to_wait)

1

Cela peut être une classe interne à votre activité.

public class SleepTask extends AsyncTask<Void, Void, Void> 
{ 

    final Button mOne, mTwo; 

    public OnCreateTask(final Button one, final Button two) { 
      mOne = one; 
      mTwo = two; 
    } 

    protected Void doInBackground(Void... params) 
    { 
     //Surround this with a try catch, I don't feel like typing it.... 
     Thread.sleep(2000); 
    } 

    protected void onPostExecute(Void result) { 
     //This keeps us from updating a no longer relevant UI thread. 
     //Such as if your acitivity has been paused or destroyed. 
     if(!isCancelled()) 
     { 
       //This executes on the UI thread. 
       mOne.setVisible(Button.VISIBLE); 
       mTwo.setVisible(Button.GONE); 
      } 
    } 
} 

Dans votre activité

SleepTask mCurTask; 

    onPause() 
    { 
     super.onPause(); 
     if(mCurTask != null) 
      mCurTask.cancel(); 
    } 

Dans votre onClick

if(mCurTask == null) 
    { 
     button1.setVisibility(Button.GONE); 
     button2.setVisibility(Button.VISIBLE); 
     mCurTask = new SleepTask; 
     mCurTask.execute(); 
    } 

je l'ai fait tout cela du haut de ma tête, donc il peut être poussé par l'éclipse pour le rendre heureux . Gardez à l'esprit que tous les appels de cycle de vie (onCreate, onDestroy) sont effectués sur le thread d'interface utilisateur, vous devez uniquement accéder à mCurTask sur le thread d'interface utilisateur si vous voulez le rendre sûr. AsyncTasks sont très agréables à utiliser, cela peut être plus de tuer pour vous scénario particulier, mais c'est un modèle qui est commun dans Android.

+0

Merci beaucoup pour votre aide et me prêter vos connaissances! Très très apprécié !! – BossWalrus

+1

Lol, c'est exagéré pour la situation, la seule chose que j'ajouterais à la réponse acceptée est de vérifier la pertinence des boutons dans la situation, les annuler dans onPause et vérifier null dans le runnable retardé. – accordionfolder

+1

Ça me sera utile un jour! Aucun doute là dessus! – BossWalrus

Questions connexes