2016-10-13 4 views
1

Ich speichere einen der Menüpunkte aus meiner Aktivität als ein Klassenfeld, wenn innerhalb onCreateOptionsMenu().So umgehen Sie Timing-Problem in Android

_myMenuItem = (MenuItem) findViewById(R.id.menu_item); 

Aber in onCreate() Ich nenne ein asynchrones Verfahren, und das Ergebnis, dass diktiert, ob ich die Sichtbarkeit wahr oder falsch machen sollte auf dem Menüpunkt; Zum Beispiel:

if (someCondition) { 
    _myMenuItem.setVisible(true); 
} 

Das Problem ist manchmal die Async Methode abgeschlossen (und der obige Code genannt wird), bevor das Menü aufgeblasen wird, eine Null-Zeiger Ausnahme verursacht.

Wie kann ich dieses Timing-Problem beheben? Im Idealfall ohne den asynchronen Anruf innerhalb onCreateOptionsMenu() wenn jemand einen guten Weg kennt. Danke

+0

'Bind ersten' danach rufen Sie Ihre 'async Methode' .... – sushildlh

+0

Könnten Sie bitte mehr erklären? – b85411

+0

könnten Sie bitte Ihren vollständigen Aktivitätscode posten? – sushildlh

Antwort

0

Deklarieren Sie eine boolesche Eigenschaft in der Aktivität. Nach Abschluss der Hintergrundarbeit setzen Sie diese Eigenschaft auf true, wenn der Menüpunkt angezeigt werden soll, andernfalls auf false und erzwingen Sie, dass das Menü erneut geladen wird (rufen Sie invalidateOptionsMenu auf). Das Aktualisieren des Optionsmenüs bewirkt, dass onPrepareOptionsMenu aufgerufen wird. Überprüfen Sie in onPrepareOptionsMenu den Wert Ihrer Eigenschaft und legen Sie die Sichtbarkeit des Menüelements fest.