Кнопку назад на панели инструментов не работает
У меня есть просто активность, которая является дочерним классом ActionBarActivity. В методе, который я установил, OnCreate поддерживал панель инструментов. Для этого я переопределяю OnOptionsItemSelected, поэтому при нажатии кнопки "назад" было выполнено некоторое действие
код выглядит так:
[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);
}
к сожалению, пока панель инструментов отображается правильно, это больше не реакция при нажатии клавиш. Я бы добавил, что в других действиях (которые используют фрагменты) все работать правильно.
пожалуйста, помогите мне
7 ответов
это должно работать так
public override bool OnOptionsItemSelected(IMenuItem item)
{
//Back button pressed -> toggle event
if (item.ItemId == Android.Resource.Id.Home)
this.OnBackPressed();
return base.OnOptionsItemSelected(item);
}
попробуйте что-то вроде этого :
просто добавьте эти строки в свой OnCreate
способ:
SupportActionBar.SetDisplayHomeAsUpEnabled(true);
затем переопределите OnOptionsItemSelected
метод, приведенный ниже.
public override bool OnOptionsItemSelected(IMenuItem item)
{
if (item.ItemId != Android.Resource.Id.Home)
return base.OnOptionsItemSelected(item);
Finish();
return true;
}
попробуйте это.панель инструментов.setNavigationOnClickListener и сделать ее ручкой onBackPressed или popBackstack согласно потребностям UR.
попробуйте сделать это:
[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();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == android.R.id.home) {
// do something
}
return super.onOptionsItemSelected(item);
}
проблема оказалась действительно странной. Макет, который использовал панель действий, имел RelativeLayout. После перехода на атрибут LinearLayout android: gravity = "вертикаль" все работает правильно.
спасибо всем за помощь
Я предлагаю вам использовать этот фрагмент кода, чтобы использовать пользовательскую кнопку назад на панели инструментов :
Первый Шаг : Добавить значок кнопки "Назад" в папке рисунков .
Второй Шаг : добавьте панель инструментов в AppBarLayout следующим образом:
<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>
Третий Этап : в вашем onCreate найдите такие представления:
Toolbar toolbar = (Toolbar) findViewById(R.id.chart_toolbar);
4-й шаг : добавьте панель действий поддержки на панель инструментов:
setSupportActionBar(toolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
5-й шаг : Добавить значок к кнопке :
toolbar.setNavigationIcon(ContextCompat.getDrawable(getApplicationContext(), R.drawable.ic_chevron_left));
6-й шаг : установите прослушиватель щелчка для кнопки "Назад":
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
NavUtils.navigateUpFromSameTask(Chart.this);
}
});
и, наконец, переопределить oncreateoptionsmenu и onoptionsitemselected методы:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.my_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return true;
}