Android TabHost - кнопка возврата

У меня есть приложение для Android, которое использует TabHost, действие, которое вызывает другие на основе выбранной вкладки, просто называется Main.java. Я попытался переопределить событие кнопки «Назад» внутри класса Main.java, но, похоже, он этого не видит. Я пытаюсь отобразить диалоговое окно и подтвердить пользователю, что он хочет выйти, и если он нажмет «ОК», он полностью закроет приложение (а не просто отправит его в фоновый режим), и если он нажмет «Отмена», очевидно, он останется открытым. Любые предложения относительно того, почему это не работает?

@Override
public void onBackPressed() 
{               
     AlertDialog.Builder alert = new AlertDialog.Builder(getApplicationContext());
     alert.setMessage("Test dialog");
     alert.show();
}

person Phil    schedule 06.05.2013    source источник
comment
Main.java - это действие?   -  person eliteslayer    schedule 06.05.2013
comment
Пожалуйста, не переопределяйте кнопку возврата таким образом. Это нестандартное поведение на Android, поэтому его никогда не следует реализовывать. Если вы решите внедрить это, ваши пользователи будут иметь голову завтракать. Вместо этого, если вам нужно вывести пользователя из системы, выйдите из системы, когда приложение закроется.   -  person Darwind    schedule 06.05.2013
comment
Main - это действие, которое имеет tabHost, но когда пользователь щелкает разные вкладки, он запускает новое намерение внутри tabcontent для этого действия. Например, если они нажимают «Статус», он запускает действие «Статус», но в пределах вкладки в Main.java. Я подтверждаю ваш ввод, Дарвинд, но мне НУЖНО диалоговое окно подтверждения, чтобы убедиться, что пользователь хочет выйти.   -  person Phil    schedule 06.05.2013
comment
будьте осторожны, возитесь со стандартным поведением приложения Android ... например, переопределив кнопку "Назад" или управление задачами, пользователи запутаются. Поместите большую кнопку ВЫХОД на свою основную задачу, чтобы она автоматически выходила из системы по истечении определенного периода времени и т. Д., Но не меняйте кнопку Назад.   -  person CSmith    schedule 06.05.2013
comment
Понятно, я рассмотрю возможность выхода пользователя из системы при закрытии приложения, как это было предложено Дарвиндом.   -  person Phil    schedule 06.05.2013


Ответы (2)


Оказывается, это довольно просто. Добавьте следующий код в действие дочерней вкладки:

@Override
public void onBackPressed() {
this.getParent().onBackPressed();   
}

Затем в TabActivity выполните настоящую логику:

 @Override
public void onBackPressed() {
// Called by children
 AlertDialog.Builder alert = new AlertDialog.Builder(getApplicationContext());
 alert.setMessage("Test dialog");
 alert.show();
}

В противном случае дочерние элементы будут перехватывать и использовать событие без уведомления узла вкладки.

person Venkat    schedule 16.05.2013

Я знаю, что это произойдет очень поздно, но это может кому-то помочь

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

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  {
        if (android.os.Build.VERSION.SDK_INT > 5
                && keyCode == KeyEvent.KEYCODE_BACK
                && event.getRepeatCount() == 0) {
            Log.d("CDA", "onKeyDown Called");
            onBackPressed();
            return true; 
        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public void onBackPressed() {
       Log.d("CDA", "onBackPressed Called");
       Intent setIntent = new Intent(Intent.ACTION_MAIN);
       setIntent.addCategory(Intent.CATEGORY_HOME);
       setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
       startActivity(setIntent);
    }

Удачи.

person Edwinfad    schedule 14.11.2016