我有一个活动(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;
}
The 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;
}
So Main
有一个选项卡MyGroup
. The 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);
}
In 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);
}
Now, in 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);
}
现在这是我当前的行为,我不想要这种行为:
- 当应用程序启动时,我处于活动状态。返回按钮 -> 应用程序关闭。好的。
- 当应用程序启动时,活动 -> 活动 -> 返回按钮 -> 活动。好的。
- 当应用程序启动时,活动 -> 活动 -> 返回 -> 活动 ->
活动 -> 返回 -> 应用程序关闭。不好!
显然,第二次显示 ActivityB 时,后退按钮由Main
, 代替ActivityB
or MyGroup
.
我怎样才能解决这个问题?
EDIT
我添加了一个 ActivityC。前两项活动中的行为似乎很正常,从第三项活动开始,Main
活动处理按钮按下。
所以 A -> B -> A 由 A -> B -> Main 处理
A -> B -> C 由 A -> B -> Main 处理。