2016-08-17 2 views
0

Ich gründe meine Toolbar zu bekommen?Wie Home Button als MenuItem android

Hier ist, was ich versucht:

MenuItem back = menu.findItem(android.R.id.home); 

Aber das macht einen NullPointerException aus irgendeinem Grund. Also, wie kann ich es als MenuItem abrufen, ohne eine NullPointerException bekommen?

+0

Warum möchten Sie einen Verweis darauf erhalten? Es gibt viele Methoden für die Interaktion mit ihm –

+0

@digithree Ich möchte die Referenz des Hauses (aka zurück) Knopf bekommen –

Antwort

-1

fand ich nicht heraus, es als MenuItem zu bekommen, aber die Home-Taste pogrammatically deaktivieren:

getSupportActionBar().setDisplayHomeAsUpEnabled(true/false) 

Dies ist, was ich brauchte. Aber ich habe immer noch nicht herausgefunden, wie man es als MenuItem bekommt.

2

This SO answer, schlägt den folgenden Code vor, aber es scheint nicht zu funktionieren und ich kann nichts anderes finden.

getWindow().getDecorView().findViewById(android.R.id.home); 

In jedem Fall ist es Hacky, da Sie nicht, dass die Referenz benötigen, und Sie sollten nicht die Ansicht Hierarchie werden durchquert es in jedem Fall zu bekommen. Da das Android SDK dies absichtlich vor dir versteckt, solltest du es nicht versuchen, da selbst wenn der obige Code funktioniert, er in einer zukünftigen Version möglicherweise nicht funktioniert (was tatsächlich als eine mögliche Erklärung dafür erscheint, dass er nicht funktioniert) ich als ich in SDK 23 Marshmallow getestet).

Also, wenn Sie das Symbol einstellen möchten, können Sie es tun, indem Sie die android:homeAsUpIndicator in Ihrem Thema, wie vorgeschlagen here.

Wenn Sie ein Klick-Ereignis auf der Home-Taste erkennen wollen, ist der richtige Weg durch Überschreiben der onOptionsItemSelected Methode von Activity zum Beispiel

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()) { 
     case android.R.id.home: 
      // do something 
      return true; 
    } 
    return false; 
} 

Jede andere Verwendung würde den beabsichtigten Zweck sein und so nicht unterstützt, wie von anderen wie in this post vereinbart.

+0

Da es schlechte Übung ist, gibt es eine Alternative? –

+0

Mit diesem Code: 'MenuItem zurück = (MenuItem) getWindow(). GetDecorView(). FindViewById (android.R.id.home); 'Ich bekomme immer noch' null' –

+1

Gut für den Anfang, 'findViewById' wird eine' View' zurückgeben, und da 'MenuItem' keine Unterklasse von' View' ist, können Sie das von 'findViewById' zurückgegebene Objekt nicht in' 'umwandeln Menüelement ". Aber es funktioniert auf keinen Fall. Ich nahm an, es würde seit der Antwort gesagt, dass es getan und akzeptiert wurde. Ich werde die Antwort aktualisieren –