Кнопка назад на панели инструментов не закрывает текущий фрагмент
У меня есть активность, которая загружает фрагмент на создание. И у меня есть панель инструментов для этого действия, в которой есть кнопка, которая при нажатии добавляет новый фрагмент поверх того, который был создан первым.
Теперь на этой панели инструментов при нажатии я хочу удалить более новый фрагмент, чтобы он просто сместил фрагмент, находящийся внизу (более старый). Я искал, и я вроде понял это, за исключением одной вещи.
Я сделал это так, чтобы он пытался увидеть, нажата ли кнопка панели инструментов:
@Override
public boolean onKeyUp(int keyCode, KeyEvent objEvent) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
onBackPressed();
return true;
}
return super.onKeyUp(keyCode, objEvent);
}
@Override
public void onBackPressed() {
FragmentManager mFM = getSupportFragmentManager();
if(mFM.findFragmentByTag("NewFragment") != null){
mFM.beginTransaction().remove(mFM.findFragmentByTag("NewFragment")).commit();
}
}
Проблема в том, что "keyCode" равен KEYCODE_BACK, только когда вы нажимаете "кнопку возврата оборудования", а не кнопку "Назад" на панели инструментов. Это дает мне код 58, а не 4 (KEYCODE_BACK).
2 ответа
Я верю, что вы ищете NavigationListener
для Toolbar
Widget:
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
но если вы используете тему с ActionBar
и установить supportActionBar, затем сделать что-то:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case android.R.id.home:
onBackPressed();
break;
}
return true;
}
Из вашего вопроса не ясно, задаете ли вы вопрос управления фрагментами (FragmentTransaction remove vs. replace) или вопрос кнопки панели инструментов. Я полагаю, последний...
Панель инструментов Android или ActionBar должны иметь действия, которые обрабатываются с помощью:
@Override
public Boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case MY_BACK_BUTTON:
myBackPressedHandler();
return (true);
}
return (false);
}
это предполагает, что ваша кнопка "Назад" добавлена в качестве элемента MenuItem и ей был присвоен идентификатор MY_BACK_BUTTON.
Для панели инструментов вы можете использовать MenuItemClickListener для обработки событий щелчка:
mToolbar.setOnMenuItemClickListener(MenuItem menuItem)
{
@Override
public Boolean onMenuItemClick(MenuItem menuItem)
{
// call onOptionsItemSelected, or handle the click here directly
return (thisFragment.onOptionsItemSelected(menuItem));
}
});
Если вы ссылаетесь на кнопку "Вверх" на панели инструментов / панели действий, то есть setDisplayHomeAsUpEnabled(true), это будет иметь getItemId() android.R.id.home и может обрабатываться аналогичным образом:
case android.R.id.home:
myBackPressedHandler();
return (true);