2013-03-29 14 views
7

Ho diversi frammenti con ListViews personalizzati. Usano il mio ListAdapter personalizzato, in cui gestisco i clic sugli elementi della lista. Devo avviare un'altra attività da questo OnClickListener e recuperare alcune informazioni su Fragment. provo a usareCome avviareActivityForResult da Adapter per ottenere il risultato di nuovo su Fragment

Intent intent=new Intent(context, DataFillerActivity.class); 
((Activity) context).startActivityForResult(intent, 3); 

ma DataFillerActivity restituisce il risultato a MainActivity, non a Fragment. quindi qual è il modo migliore per risolvere questo problema? grazie

risposta

3

di aggiornare il tuo frammento, l'unico modo dovrebbe essere sopra l'attività . Questo perché un Frammento è progettato per essere modulare.

http://developer.android.com/training/basics/fragments/communicating.html

Se si avvia un acitivity per il risultato, il risultato sarà passato al di attività che ha iniziato la richiesta. Ora puoi passare i dati al frammento desiderato.

2

basta sovrascrivere il onActivityresult nella classe di attività e passare il risultato del frammento dalle attività, è possibile trovare frammento sia ma id tag

5

Come scrive Steve, un frammento dovrebbe essere modulare. Tuttavia, ciò significa che la comunicazione deve non passare attraverso qualsiasi attività ma rimanere all'interno del frammento.

Per risolvere questo problema, assicurarsi che il proprio ListAdapter abbia un riferimento al frammento e utilizzare fragment.startActivityForResult(). Quindi il risultato tornerà al frammento onActivityResult().

+0

Provato ma non funzionante, non è sicuro sia dovuto a bug relativi a http://stackoverflow.com/questions/18271761/onactivityresult-gets-called-when-activity-start-not-when-its-finished. Ma se chiamo un'altra attività dal mio frammento, funziona. Solo quando viene chiamato startActivityForResult all'interno di ListView del frammento, l'onActivityResult del frammento viene chiamato immediatamente dopo l'inizio dell'attività prevista. – teapeng

+0

Ho risolto il problema dopo aver rimosso intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); prima di chiamare fragment.startActivityForResult (intent, 0); +1 per te. – teapeng

+0

Ti amo Adamn –

6

Fai onActivityResult metodo Main Activity come questo

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     //super.onActivityResult(requestCode, resultCode, data); 
     // Check if image is captured successfully 

     super.onActivityResult(requestCode, resultCode, data); 
     for (Fragment fragment : getSupportFragmentManager().getFragments()) { 
      fragment.onActivityResult(requestCode, resultCode, data); 
     } 
    } 

Passerà il codice risultato al suo frammento bambino.

Problemi correlati