2012-12-15 4 views
6

Questo sembra più difficile di quanto sembri o lo sto facendo male. Devo aggiornare il contenuto degli elementi dell'interfaccia utente in un frammento.Come eseguire AsyncTask <> situato in un frammento dal suo genitore?

Così, all'interno di un Activity, comincio AsyncTask compito come questo

new MyAsyncTask().execute(); 

Inside "normale" classe Activity questo asincrona è private così ho pensato che avrei potuto fare che public all'interno della classe frammento e quindi in grado chiamarlo dalla classe genitore FragmentActivity. Qualcosa di simile a questo:

MyFragment myFragment = (MyFragment) getSupportFragmentManager().findFragmentById(R.layout.my_fragment); 
new myFragment.DoParsingAsyncTask().execute(""); //??? a silly guess 

Questo non ha funzionato.

Qualcuno può aiutare?

PS. I miei frammenti non sono viste <fragment> in XML, ma li gestisco tramite ViewPager. Non ho problemi a visualizzare pagine tramite ViewPager.
PPS. questa classe async inizia l'analisi del contenuto remoto e riempie gli elementi dell'interfaccia utente nel frammento.

+1

myFragment.new DoParsingAsyncTask(). Execute (""); ? Inoltre puoi sempre creare le tue classi di attività come classi separate e utilizzare i gestori per aggiornare l'interfaccia utente. –

+0

@GeorgyGobozov Sto convertendo lo schema 'Activity' in frammenti e sto cercando di trovare la soluzione più semplice. Questa era solo una supposizione sbagliata. – sandalone

+0

myFragment.new DoParsingAsyncTask(). Execute ("") funziona? È necessario creare istanze di classi interne in questo modo. –

risposta

8

Potrebbe non risolvere il problema, ma creare un metodo nel frammento e chiamarlo per creare e avviare l'attività asincrona. Sarà solo più ordinato. Ecco il codice.

Da Fragment chiamare il metodo in questo modo.

Activity myActivity = getActivity(); 
if (myActivity instanceof MyActivity) { 
    ((MyActivity) myActivity).doAsyncTaskMethod(); 
} 

Oppure puoi provare la soluzione che ho già proposto.

MyFragment myFragment = (MyFragment) getSupportFragmentManager().findFragmentById(R.layout.my_fragment); 
myFragment.new DoParsingAsyncTask().execute(""); 

Che funziona pure.

+0

Grazie per questo, ho voluto fare il contrario (chiamare un'attività asincrona nell'attività di hosting dal suo frammento), e non ho potuto ottenere la sintassi corretta. Quello di cui avevo bisogno era getActivity(). New MyAsyncTask(). Execute() bit :) –

Problemi correlati