У меня есть активность (Main
), в которой отображаются следующие вкладки:
private void initTabs(){
mTabHost = getTabHost(); // The activity TabHost
Intent intent;
intent = new Intent().setClass(this, MyGroup.class);
setupTab(intent, "tab");
}
private void setupTab(Intent intent, final String tag) {
View tabview = createTabView(mTabHost.getContext(), tag);
TabSpec setContent = mTabHost.newTabSpec(tag).setIndicator(tabview).setContent(intent);
mTabHost.addTab(setContent);
}
private static View createTabView(final Context context, final String text) {
View view = LayoutInflater.from(context).inflate(R.layout.tabs_bg, null);
((TextView) view.findViewById(R.id.tabsText)).setText(text);
return view;
}
Класс MyGroup
- это группа ActivityGroup, которая выполняет следующие действия:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View view = getLocalActivityManager().startActivity("activityA", new Intent(this, ActivityA.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();
this.setContentView(view);
state = A;
}
public void openB() {
Intent i = new Intent(this, ActivityB.class);
View view = getLocalActivityManager().startActivity("activityB", i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();
this.setContentView(view);
state = B;
}
Итак, Main
имеет вкладку с MyGroup
. MyGroup
начинается с ActivityA
и затем переходит к ActivityB
. Когда я нажимаю кнопку «Назад» в ActivityB
, я хочу вернуться к ActivityA
, а при нажатии «Назад» в ActivityA
Я хочу закрыть приложение.
Вот как я это сделал. В ActivityB
:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
System.out.println("ActivityB PRESSED");
if (keyCode == KeyEvent.KEYCODE_BACK) {
MyGroup mg = (MyGroup) getParent();
return mg.onKeyDown(keyCode, event);
}
return super.onKeyDown(keyCode, event);
}
В ActivityA
то же самое:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
System.out.println("ActivityA PRESSED");
if (keyCode == KeyEvent.KEYCODE_BACK) {
MyGroup mg = (MyGroup) getParent();
return mg.onKeyDown(keyCode, event);
}
return super.onKeyDown(keyCode, event);
}
Сейчас, в MyGroup
:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
System.out.println("MG PRESSED");
if (state == A)
return false;
else if (state == B) {
setContentView(getLocalActivityManager().startActivity("activityA", new Intent(this, ActivityA.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView());
state = A;
return true;
}
return false;
}
return super.onKeyDown(keyCode, event);
}
Наконец, в Main
, просто system.out:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
System.out.println("MAIN PRESSED");
return super.onKeyDown(keyCode, event);
}
Теперь это мое текущее поведение, которого я не хочу:
- Когда приложение запустилось, я в ActivityA. Кнопка -> приложение закрывается. OK.
- Когда приложение запускалось, ActivityA -> ActivityB -> Кнопка «Назад» -> ActivityA. OK.
- Когда приложение запускалось, ActivityA -> ActivityB -> Back -> ActivityA ->
ActivityB -> Back -> приложение закрывается. НЕ ОК!
По-видимому, во второй раз отображается ActivityB, кнопка возврата обрабатывается Main
вместо ActivityB
или MyGroup
.
Как я могу это исправить?
EDIT
Я добавил ActivityC. Кажется, что поведение в первых двух действиях нормальное, а с третьего - действие Main
обрабатывает нажатие кнопки.
Итак, A -> B -> A обрабатывается A -> B -> Main
и A -> B -> C обрабатываются A -> B -> Main.