Отправить ключВниз по TabActivity - PullRequest
0 голосов
/ 19 февраля 2011

В моем приложении у меня есть 4 вкладки в моем TabActivity. Мне нужно всплывающее диалоговое окно подтверждения пользователя, когда пользователь выходит из моего приложения.

Я переопределил событие onKeyDown для TabActivity и закодировал мои требования, но результат не соответствует ожидаемому, т.е. при выходе пользователя не появляется всплывающее окно, но когда я переопределяю нажатие клавиш на дочерних вкладках, требование заполнено заполнены.

Да, я могу просто скопировать и вставить код onKeyDown для всех моих дочерних вкладок, но есть ли лучший способ для этого, может быть, я смогу отправить onKeyDown на свой TabActivity.

Вот код:

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode == KeyEvent.KEYCODE_BACK) {
        new AlertDialog.Builder(this)
        .setTitle("Confirm Quit")
        .setMessage("Really Quit ?")
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {

            }

        })
        .setNegativeButton("Wait!", null)
        .show();

        return true;
    }
    else {
        return super.onKeyDown(keyCode, event);
    }

}

Ответы [ 3 ]

0 голосов
/ 21 февраля 2011

Вот как я этого добился

В моем TabActivity я создал статический метод для обработки всех моих вызовов с дочерних вкладок

public static boolean hanndleChildBackButtonPress(final Activity activity,int keyCode, KeyEvent event){

    if(keyCode == KeyEvent.KEYCODE_BACK) {
            //HANDLING MY ON KEY DOWN LOGIC
            return true;
    }
    else {
            return false;
    }

}

И на своих дочерних вкладках я переключил KeyDownвызов статического метода из TabActivity

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
     if(MyTabActivity.hanndleChildBackButtonPress(this, keyCode, event)) {
            return true;
        }
        else {
            return super.onKeyDown(keyCode, event);
        }

}
0 голосов
/ 30 сентября 2011

Вы можете просто переопределить метод onKeyDown в субактивности Tabactivity следующим образом, чтобы избежать KeyEvent.KEYCODE_BACK используется субактивностями.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
            return false;
        } else {
            return super.onKeyDown(keyCode, event);
    }
}
0 голосов
/ 19 февраля 2011

Вы должны переопределить onBackPressed () метод.

@Override
public void onBackPressed() {
new AlertDialog.Builder(this)
        .setTitle("Confirm Quit")
        .setMessage("Really Quit ?")
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {

            }

        })
        .setNegativeButton("Wait!", null)
        .show();
return;
}

РЕДАКТИРОВАТЬ: кажется, что вы используете 1.6, где нет onBackPressed

Я думаю, что вы должны переопределить onKeyUp (...), как в этом примере.

...