2017-01-08 2 views
0

Après avoir affiché une Snackbar, je lance un Thread pour exécuter des actions. Je veux changer le texte en fonction de la progression actuelle dans ce sujet.Modifier le texte d'un snack dans un autre thread

je crée le Snack-bar:

private View snackbarview; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton upload = (FloatingActionButton) findViewById(R.id.upload); 
    upload.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Confirm ?", Snackbar.LENGTH_SHORT) 
        .setAction("YES", new View.OnClickListener() { 
         @Override 
         public void onClick(View view) { 
          lauchMyThread(); 
          Snackbar snackbarconfirm = Snackbar.make(view, "Working...", Snackbar.LENGTH_INDEFINITE); 
          snackbarconfirm.show(); 
          snackbarview = snackbarconfirm.getView(); 
         } 
        }).show(); 
     } 
    }); 
} 

je tente de mettre à jour son texte en run() de Runnable():

public void run() { 

      TextView tv = (TextView) snackbarview.findViewById(android.support.design.R.id.snackbar_text); 

      try { 

       tv.post(new Runnable() { 
        public void run() { 
         TextView tv = (TextView) snackbarview.findViewById(android.support.design.R.id.snackbar_text); 
         tv.setText("Task 1 performed."); 
        } 
       }); 

       // and so on... 
      } 
} 

Cette méthode fonctionne pour Textview, mais les accidents avec Snack-bar:

java.lang.NullPointerException: tentative d'invoquer la méthode virtuelle 'android.view.View android.view.View.findViewById (int)' sur un ob null référence de référence

Comment le réparer?

+1

Déplacer 'lauchMyThread();' ligne après 'snackbarview = snackbarconfirm.getView();' ligne –

Répondre

1

Vous devriez commencer fil après snackbarview initialisation.

+0

Merci, maintenant c'est assez évident ... – Anduriel

1

Pourquoi ne pas essayer de créer une nouvelle fonction à l'intérieur snackbar run() ..

+0

Je pourrais avoir en effet, je préfère juste réutiliser l'existant. Je ne sais pas ce qui est le plus efficace. – Anduriel