2015-11-14 4 views
6

Ich habe einfach Aktivität, die Kind der ActionBarActivity-Klasse ist. In der Methode habe ich OnCreate eingestellt unterstützt die Symbolleiste. Dafür ich die OnOptionsItemSelected außer Kraft setzen, so dass, wenn ich die Zurück-Taste drücken durchgeführt wurde, wie dies einige AktionSchaltfläche Zurück in der Symbolleiste funktioniert nicht

Der Code sieht:

[Activity (Label = "SimplyActivity", Theme="@style/MyTheme")]   
     public class SimplyActivity : ActionBarActivity 
     { 
      private Toolbar toolbar; 
// ... 
// OnCreate method 
this.toolbar = FindViewById<Toolbar>(Resource.Id.toolbar); 
SetSupportActionBar (this.toolbar); 
      SupportActionBar.SetDisplayHomeAsUpEnabled (true); 
      SupportActionBar.SetHomeButtonEnabled (true); 

public override bool OnOptionsItemSelected (IMenuItem item) 
     { 
      if (item.TitleFormatted == null) { 
       this.OnBackPressed(); 
      } 

      return base.OnOptionsItemSelected (item); 
     } 

Leider ist angezeigt, solange die Symbolleiste nicht mehr, das richtig jede Reaktion, wenn Tasten zurück gedrückt werden. Ich würde hinzufügen, dass in anderen Aktivitäten (die Fragmente verwendet) alles korrekt funktioniert.

Bitte helfen Sie mir

+0

"Dies ist keine Reaktion mehr, wenn die Tasten zurückgedrückt werden." Tasten - Hardware-Taste "Zurück" oder was? – XTL

Antwort

1

Das Problem stellte sich heraus, wirklich seltsam. Layout, das die Aktionsleiste verwendete, hatte RelativeLayout. Nach dem Wechsel zum LinearLayout-Attribut android: gravity = "vertical" funktioniert alles korrekt.

Dank alle für die Hilfe

4

try this.toolbar.setNavigationOnClickListener und es onBackPressed oder popBackstack entsprechend ur Bedürfnisse machen behandeln.

+0

Ich habe das vorher versucht und es funktioniert nicht. Die Ereignisse werden nicht ausgeführt. – Jake

8

Es sollte wie arbeiten diese

public override bool OnOptionsItemSelected(IMenuItem item) 
{ 
    //Back button pressed -> toggle event 
    if (item.ItemId == Android.Resource.Id.Home) 
     this.OnBackPressed(); 

    return base.OnOptionsItemSelected(item); 
} 
4

versuchen, dies zu tun:

[Activity (Label = "SimplyActivity", Theme="@style/MyTheme")]   
     public class SimplyActivity : ActionBarActivity 
     { 
      private Toolbar toolbar; 
// ... 
// OnCreate method 
this.toolbar = FindViewById<Toolbar>(Resource.Id.toolbar); 
SetSupportActionBar (this.toolbar); 
      SupportActionBar.SetDisplayHomeAsUpEnabled (true); 
      SupportActionBar.SetHomeButtonEnabled (true); 
//dont forget this 
      this.toolbar.SyncState(); 
this.toolbar += ClickedMenu; 

public override bool OnOptionsItemSelected (IMenuItem item) 
     { 
      this.OnOptionsItemSelected(item); 
      return base.OnOptionsItemSelected (item); 
     } 

public void ClickedMenu(object sender,SupportToolbar.MenuItemClickEventArgs e) 
     { 
      switch (e.Item.ItemId) 
      {  //your TitleFormatted ID 
       case Resource.Id.action_edit: 
        //do stuff here 
       this.OnBackPressed(); 
        break; 
      } 
     } 
protected override void OnPostCreate(Bundle savedInstanceState) 
     { 
      base.OnPostCreate(savedInstanceState); 
      this.toolbar.SyncState();  
     } 
7

so etwas wie dieses Versuchen:

Fügen Sie einfach diese Zeilen in Ihrem OnCreate Methode:

SupportActionBar.SetDisplayHomeAsUpEnabled(true); 

Dann überschreiben Sie die OnOptionsItemSelected Methode wie unten angegeben.

public override bool OnOptionsItemSelected(IMenuItem item) 
{ 
    if (item.ItemId != Android.Resource.Id.Home) 
     return base.OnOptionsItemSelected(item); 
    Finish(); 
    return true; 
} 
3
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if(item.getItemId() == android.R.id.home) { 
    // do something 
    } 
    return super.onOptionsItemSelected(item); 
} 
0

Ich schlage vor, Sie den Code-Schnipsel zu verwenden, um einen benutzerdefinierten Back-Button in der Symbolleiste zu verwenden:

Erster Schritt: ein Symbol Schaltfläche Hinzufügen zurück in ziehbar Ordner.

Zweiter Schritt: Add-Symbolleiste in Ihren AppBarLayout wie folgt aus:

<android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/chart_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 

</android.support.design.widget.AppBarLayout> 

Dritter Schritt: in Ihrem onCreate Ansichten wie diese finden:

Toolbar toolbar = (Toolbar) findViewById(R.id.chart_toolbar); 

4. Schritt: Unterstützung Aktionsleiste hinzufügen zu Ihrer Symbolleiste:

setSupportActionBar(toolbar); 

if (getSupportActionBar() != null) { 
     getSupportActionBar().setDisplayShowHomeEnabled(true); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
} 

5. Schritt: Wunsch Icon auf der Schaltfläche Hinzufügen:

toolbar.setNavigationIcon(ContextCompat.getDrawable(getApplicationContext(), R.drawable.ic_chevron_left)); 

6. Schritt: einen Klick Zuhörer für die Rücken-Taste eingestellt:

toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       NavUtils.navigateUpFromSameTask(Chart.this); 
      } 
}); 

und schließlich außer Kraft setzen oncreateoptionsmenu und onoptionsitemselected Methoden:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.my_menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     return true; 
    }