2015-08-23 12 views
6

Ho un'attività e avvia un DialogFragment, al termine di un evento il DialogFragment invia un evento sul bus eventi Otto, questo è per attivare un metodo nella sua attività principale. Ho postato il codice relativo qui, lo stesso codice funziona altrove nella mia app, ma qui l'evento non ha effetto.Otto evento non sparato

Codice nell'attività ...

@Subscribe 
public void OttoUpdateUI(BudgetUpdateObject budgetUpdateObject) 
{ 
    updateUI(); 
    Log.d("budget", "Otto updateUI called"); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    BusStand.getInstance().register(BudgetActivityNew.class); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    BusStand.getInstance().unregister(BudgetActivityNew.class); 
} 

classe busstand ....

public final class BusStand { 
private static final Bus BUS = new Bus(); 

public static Bus getInstance() { 
    return BUS; 
} 

private void BusProvider() { 

    } 
} 

e l'evento di tiro ...

BusStand.getInstance().post(new BudgetUpdateObject()); 

ho controllato il importare nell'attività, e non sto usando il modulo dagger, e non sto usando nessun altro bus di eventi. Qualsiasi aiuto sarà molto apprezzato.

Questo è il modo in lancio il DialogFragment dall'attività ....

AddBudgetDialogFragment addBudgetDialogFragment = new AddBudgetDialogFragment(); 
addBudgetDialogFragment.setStyle(DialogFragment.STYLE_NO_TITLE,0); 
addBudgetDialogFragment.show(getSupportFragmentManager(),"DialogFragment"); 
+0

Come si avvia la finestra di dialogo? Potrebbe essere che tu "metti in pausa" l'attività per farlo? Se l'attività è in pausa, l'evento arriva prima che 'onResume' venga chiamato – lgvalle

+0

. Il codice sembra corretto. Condividi attività e codice di dialogo. –

+0

@Igvalle, lasciatemi scrivere alcune dichiarazioni di registro e guarda in che stato si trova l'attività quando viene attivato l'evento ... –

risposta

1

Trovato la risposta grazie a these ragazzi .... AndroidAnnotations stava ignorando @subscribe, quindi il mio evento subsrcibed non è mai stato licenziato, trovato questo utilizzando i punti di interruzione .... Peccato, mi sono trasferito su EventBus e tutto è lavorando bene .... un tale peccato mi è piaciuto così tanto Otto .....

+0

Sei sicuro? AA sovrascrive quei metodi perché in realtà Otto non può sottoscriverlo in altro modo, a causa dell'utilizzo di una sottoclasse creata da AA, e non della classe che è annotata con '@Subscribe '. – WonderCsabo

-2

È necessario registrare il proprio DialogFragment sul Bus. Pubblica il codice per il tuo DialogFragment così posso aiutarti.

+0

Ho pensato che non è necessario registrarsi per pubblicare un evento .. Mi sbaglio? –

+0

La domanda afferma "Ho un'attività e avvia un DialogFragment", quindi "il DialogFragment pubblica un evento sul bus eventi Otto". Poiché il 'DialogFragment', figlio di' Fragment', non è registrato sul bus, il tuo evento non viene attivato. Provalo tu stesso nel codice, scrivi un'altra classe 'Fragment' e prova a lanciare un evento da esso anche quando il tuo' Activity' è registrato. – AndyRoid

+0

Dopo due giorni di ricerca, ho scoperto che non è necessario registrarsi per pubblicare un evento sul bus degli eventi di otto, sia che si utilizzi Fragment, DialogFragment, Service o un'attività ... –

5

il problema è che si è non registrare l'attività istanza, si sta registrando la classe:

. BusStand.getInstance() registrare (BudgetActivityNew.class);

è necessario modificare il codice per:

BusStand.getInstance() registrare (this);.

Che dovrebbe farlo. :)

+0

provato, ma non era efficace ..... –

1

Nel mio caso ho importato una classe di libreria errata nella mia classe. Controllare le importazioni ~

Per me, la sostituzione:

import com.google.common.eventbus.Subscribe; 

con questo:

import com.squareup.otto.Subscribe; 

Spero che questo aiuti qualcuno.

Problemi correlati