Функциональность Кнопки возврата на Android TabActivity с несколькими дочерними действиями

#android #android-activity #tabactivity

#Android #android-активность #tabactivity

Вопрос:

у меня есть TabActivity в Android project, который содержит несколько вкладок. На каждой вкладке я могу открывать различные действия, и после открытия его на вкладке я хочу вернуться к предыдущему действию на той же вкладке, но поведение Android по умолчанию закрывает мою активность на корневой вкладке. Как я могу реализовать поведение, которое мне нужно?

Комментарии:

1. @Переопределить общедоступное логическое значение onKeyDown (int keyCode, событие KeyEvent) { if (keyCode == ключевое событие. KEYCODE_BACK) { // предотвращение предыдущей реализации по умолчанию, просто завершите текущее действие, верните true; } верните super.onKeyDown(код ключа, событие); }

Ответ №1:

Есть несколько способов сделать это. Первый включает в себя создание пользовательского GroupActivity, который будет отслеживать стек из LocalActivityManager, а затем расширять этот класс для каждой из ваших вкладок. Для этого ознакомьтесь с этим руководством:

http://ericharlow.blogspot.com/2010/09/experience-multiple-android-activities.html

Более простой подход заключается в том, чтобы сохранить массив вложенных представлений вашей вкладки в вашем начальном классе ActivityGroup, а затем переопределить кнопку возврата. Вот несколько примеров кода:

 public void replaceContentView(String id, Intent newIntent) {
    View view = getLocalActivityManager()
                    .startActivity(id, newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) 
                    .getDecorView();
    viewList.add(view); // Add id to keep track of stack.
    this.setContentView(view);
}       


public void previousView() {

    if(viewList.size() > 0) {  
        viewList.remove(viewList.size()-1);
        if (viewList.size() > 0)
            setContentView(viewList.get(viewList.size()-1)); 
        else
          initView();
    }else {  
        finish();  
    }  
}
  

Класс InitView () содержит все изменения представления исходного действия. Таким образом, вы можете вызвать этот метод для восстановления исходного действия, если в массиве больше нет просмотров.