Как управлять кнопкой возврата в действии
Как обращаться с кнопкой "Назад" в действии. Где у меня есть кнопки. Если я нажму на одну из кнопок, она будет перенаправлена на нужные мне кнопки. Он работает нормально, но когда я нажимаю кнопку "Назад", он заканчивается.
Как решить эту проблему. У меня есть только одно действие для всех этих кнопок.
Спасибо заранее.
@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);
}
Я использовал выше код для обработки кнопки возврата, но не работает. Когда я нажимаю кнопку "назад", она сама ударяет туда.
Ответы
Ответ 1
Вы можете справиться с этим следующим образом:
для уровня 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);
}
Ответ 2
В дополнение к вышесказанному я лично рекомендую
onKeyUp():
Программный диалог будет срабатывать, когда пользователь нажимает клавишу , но нажата клавиша , а повторяется, когда пользователь удерживает нажатой клавишу. *
Это остается верным для всех платформ разработки.
Google-разработчик предположил, что если вы перехватываете кнопку BACK в представлении, вы должны отслеживать KeyEvent с starttracking при 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);
}
Ответ 3
Более простой подход - захватить кнопку "Назад" и вызвать 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 и эти рекомендации о том, как обращаться с кнопкой "Назад"
Ответ 4
Вы должны использовать:
@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, например)
Ответ 5
Для кнопки возврата аппаратного устройства и мягкой домашней (обратной) кнопки, например. "&" - "это то, что работает для меня. (* Примечание. У меня есть панель приложений/панель инструментов в действии)
@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();
}
Ура!
Ответ 6
Это помогло мне..
@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();
}
Надеюсь, это вам поможет..:)