2015-11-14 25 views
6

Mam po prostu aktywność, która jest dzieckiem klasy ActionBarActivity. W metodzie ustawienia OnCreate obsługiwany jest pasek narzędzi. Do tego przesłonić OnOptionsItemSelected, więc po naciśnięciu przycisku wstecz przeprowadzono pewne działaniaPrzycisk Wstecz w pasku narzędzi nie działa

Kod wygląda następująco:

[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); 
     } 

Niestety, tak długo, jak jest wyświetlany pasek narzędzi poprawnie, to nie jest już jakakolwiek reakcja po naciśnięciu klawiszy. Dodam, że w innych działaniach (wykorzystujących fragmenty) wszystko działa poprawnie.

Proszę mi pomóc

+0

"to nie jest już żadna reakcja po naciśnięciu klawiszy." Klucze - przycisk sprzętowy "Wstecz" lub co? – XTL

Odpowiedz

1

Problemem okazała się naprawdę dziwnie. Układ, który korzystał z paska akcji, miał RelativeLayout. Po przejściu na atrybut LinearLayout android: gravity = "vertical" wszystko działa poprawnie.

Dzięki wszystkim za pomoc

4

try this.toolbar.setNavigationOnClickListener i uczynić go obsługiwać onBackPressed lub popBackstack według ur potrzeb.

+0

Próbowałem już wcześniej i to nie działa. Zdarzenia nie są wykonywane. – Jake

8

Powinien działać jak ten

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

próbować to zrobić:

[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

Spróbuj czegoś takiego:

Wystarczy dodać to linie w metodzie OnCreate:

SupportActionBar.SetDisplayHomeAsUpEnabled(true); 

Następnie należy zastąpić metodę OnOptionsItemSelected, jak podano poniżej.

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

Proponuję użyć tego fragmentu kodu, aby użyć niestandardowego przycisku wstecz w pasku narzędzi:

Pierwszy krok: dodać ikonę powrót przycisku do rozciągliwej folderu.Pasek dodatek do swojej AppBarLayout tak::

Krok drugi

<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> 

Krok trzeci: w swoim onCreate Widoki jak to:

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

4. krok: dodać wsparcie pasek działań do paska narzędzi:

setSupportActionBar(toolbar); 

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

5-ty krok: Dodaj ikonę pożądanie do przycisku:

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

6-cie krok: ustawić kliknij słuchacza do przycisku Wstecz:

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

i wreszcie zastępują oncreateoptionsmenu i onoptionsitemselected metod:

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

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     return true; 
    }