#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 () содержит все изменения представления исходного действия. Таким образом, вы можете вызвать этот метод для восстановления исходного действия, если в массиве больше нет просмотров.