我有一个 Activity ( 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);
}
最后, in Main
,只是一个 system.out:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
System.out.println("MAIN PRESSED");
return super.onKeyDown(keyCode, event);
}
现在这是我当前的行为,我不想要:
- 当应用程序启动时,我在 ActivityA 中。后退按钮-> 应用程序关闭。好的。
- 当应用程序启动时,ActivityA -> ActivityB -> 后退按钮 -> ActivityA。好的。
- 当应用程序启动时,ActivityA -> ActivityB -> Back -> ActivityA -> ActivityB -> Back -> 应用程序关闭。不好!
显然,第二次显示 ActivityB 时,后退按钮由 处理Main
,而不是ActivityB
处理MyGroup
。
我怎样才能解决这个问题?
编辑
我添加了一个 ActivityC。前两个活动中的行为似乎是正常的,从第三个开始,Main
活动处理按钮按下。
所以 A -> B -> A 由 A -> B -> Main 处理
A -> B -> C 由 A -> B -> Main 处理。