Répondre

1

Le onPostExecute fonctionne déjà dans le UIThread, vous avez juste besoin de votre fragment d'appeler votre activité. La façon dont je le fais habituellement est en définissant une interface pour le fragment. Comme ceci:

public interface YourFragmentListener { 
    void onParksLoaded(List<String> names) 
} 

ensuite sur votre activité:

public class YourActivity implements YourFragmentListener { 

    @Override 
    void onParksLoaded(List<String names) { 
     // Do something with the names 
     yourField.setText(names.get(0)) 
    } 

} 

Enfin dans votre fragment vous pouvez l'utiliser comme ceci:

@Override 
protected void onPostExecute(String value) { 
    ((YourFragmentListener) getActivity()).onParksLoaded(value) 
} 

Bien sûr, vous pouvez modifier les types de mieux adapter votre cas d'utilisation. Méfiez-vous de la distribution, si vous utilisez ce fragment dans une activité qui n'implémente pas YourFragmentListener, elle lèvera une exception

+0

fonctionne comme un charme, merci –

0

lorsque vous avez créé le fragment que vous avez une instance de lui donc ce que vous pouvez faire est onPostExecute pour appeler la méthode sur votre fragment

@Override 
protected void onPostExecute(String value) { 
yourFragment.doSomething() 
} 
+0

Je ne peux pas faire cela car je ne peux pas appeler une méthode non statique depuis onPostExecute (getView() et getContext() sont des méthodes non statiques). et J'ai une autre tâche dans cette méthode qui ne peut pas être chargée. –

+0

pourquoi pas? la tâche asynchrone située dans votre classe? – Yoni

+0

le deuxième asynctask est situé dans le fragment, pour charger une image à partir d'une URL sur un ImageView –

0

Définir votre méthode souhaitée dans le fragment de mettre à jour l'interface utilisateur, lorsque async travail est fait, la recherche de fragment dans l'activité mère et appeler la méthode sur l'instance fragment

MyFragment:

public void refreshUI(String data) { 
    //Do something with data you receive  
} 

ParentActivity:

@Override 
protected void onPostExecute(String value) { 
    //or you can find it with tag if have any 
    MyFragment frag = getFragmentManager().findFragmentById(R.id.container); 
    if(frag != null) frag.refreshUI(value); 
}