2010-12-11 21 views
0

J'ai besoin de bons conseils pour mon code. voici ce que je veux faire.Comment désélectionner la vue après un certain temps sans geler l'activité

J'ai une activité qui a des vues qui peuvent être sélectionnées par l'utilisateur. supposé que l'utilisateur a sélectionné une vue, je veux désélectionner cette vue automatiquement après, disons, 5 secondes. Je le fais par un fil.

lorsque l'utilisateur sélectionne la vue, j'appelle ...

Deselector deselect = new Deselector(mp.getDuration(), clickedview); 
deselect.start(); 

... dans l'activité.

la classe deselector:

class Deselector extends Thread 
{ 
int millis=0; 
View view = null; 

Deselector(int millis, View view) 
{ 
    this.millis = millis; 
    this.view = view ; 
} 

@Override 
public void run() { 
    // TODO Auto-generated method stub 
    try { 
     this.sleep(millis); 
     view.setSelected(false); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

} 

plantage de mon programme et logkitty dit

12-11 14: 29: 37,457: ERREUR/AndroidRuntime (3263): android.view.ViewRoot $ CalledFromWrongThreadException : Seul le thread d'origine qui a créé une hiérarchie de vues peut toucher ses vues.

comment le faire correctement?

merci d'avance

m.d.

Répondre

3

Utilisez postDelayed() sur un widget ou un Handler, plutôt qu'un thread d'arrière-plan, pour que le travail fonctionne après le délai que vous avez proposé.

+0

merci, maintenant je suis l'effet recherché. – mad

1

je l'ai eu de travail en procédant comme suit

clickedview.postDelayed(new Deselector(clickedview), mp.getDuration()); 

avec mon deselctor runnable maintenant un peu plus court:

class Deselector implements Runnable 
{ 
View view = null; 

Deselector(View view) 
{ 
    this.view = view ; 
} 

@Override 
public void run() { 
    // TODO Auto-generated method stub 
    try { 
     view.setSelected(false); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

}