Как обращаться с кнопкой "назад" в действии
Как обработать кнопку возврата в упражнении. Где у меня есть несколько кнопок. Если я нажимаю одну из кнопок, она перенаправляет на нужные мне кнопки. Работает нормально, но когда я нажимаю кнопку "Назад", все заканчивается.
Как решить эту проблему. У меня есть только одно действие для всех этих кнопок. Заранее спасибо.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK))
{
return false; //I have tried here true also
}
return super.onKeyDown(keyCode, event);
}
Я использовал приведенный выше код для обработки кнопки назад, но она не работает. Когда я нажимаю кнопку "Назад", она ударила там сама.
9 ответов
Вы можете справиться с этим так:
для API уровня 5 и выше
@Override
public void onBackPressed() {
// your code.
}
старше API 5
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
// your code
return true;
}
return super.onKeyDown(keyCode, event);
}
В дополнение к вышесказанному я лично рекомендую
onKeyUp():
Программно говоря Говорящая клавиша будет срабатывать, когда пользователь нажимает клавишу изначально, но будет повторяться, пока пользователь удерживает нажатой клавишу.*
Это остается верным для всех платформ разработки.
Разработчики Google предложили, что если вы перехватываете кнопку BACK в представлении, вы должны отслеживать KeyEvent с помощью starttracking on keydown, а затем вызывать с keyup.
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) {
event.startTracking();
return true;
}
return super.onKeyDown(keyCode, event);
}
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
&& !event.isCanceled()) {
// *** Your Code ***
return true;
}
return super.onKeyUp(keyCode, event);
}
Как для кнопки аппаратного устройства "назад", так и для кнопки "мягкий" (назад), например "<-", это то, что мне подходит. (* Обратите внимание, у меня есть панель приложения / панель инструментов в упражнении)
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
//finish();
onBackPressed();
break;
}
return true;
}
@Override
public void onBackPressed() {
//Execute your code here
finish();
}
Ура!
Вы должны использовать:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR
&& keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) {
// Take care of calling this method on earlier versions of
// the platform where it doesn't exist.
onBackPressed();
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
// This will be called either automatically for you on 2.0
// or later, or by the code above on earlier versions of the
// platform.
return;
}
Как определено здесь: http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html
Если вы используете более старую версию для компиляции кода, замените android.os.Build.VERSION_CODES.ECLAIR на 5 (например, вы можете добавить частный int с именем ECLAIR)
Более простой подход - захватить нажатие кнопки "Назад" и вызвать moveTaskToBack(true) следующим образом:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(true);
return true;
}
return super.onKeyDown(keyCode, event);
}
В Android 2.0 появился новый метод onBackPressed и эти рекомендации о том, как обрабатывать кнопку Back.
Это простой способ сделать что-то.
@Override
public void onBackPressed() {
// do what you want to do when the "back" button is pressed.
startActivity(new Intent(Activity.this, MainActivity.class));
finish();
}
Я думаю, что могут быть более сложные способы решения этой проблемы, но мне нравится простота. Например, я использовал шаблон выше, чтобы заставить пользователя выйти из приложения, а затем вернуться к другой деятельности по моему выбору.
Это помогло мне..
@Override
public void onBackPressed() {
startActivity(new Intent(currentActivity.this, LastActivity.class));
finish();
}
ИЛИ ЖЕ????? даже вы можете использовать это для переключения ящика также
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
startActivity(new Intent(currentActivity.this, LastActivity.class));
finish();
}
Я надеюсь, что это поможет вам..:)
Если вы просто хотите, чтобы кнопка «Назад» не работала без предупреждений, поместите это в onCreate (вам могут потребоваться дополнительные импорты):
this.onBackPressedDispatcher.addCallback(this, false) { }
intent = Intent(this@activity2,activity1::class.java)
startActivity(intent)