我有這說明標籤這樣一個活動(Main
):與標籤後退按鈕的行爲和的ActivityGroup
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。後退 - >應用程序關閉。好。
- 當應用程序啓動時,ActivityA - > ActivityB - >後退按鈕 - > ActivityA。好。
- 當應用程序啓動時,ActivityA→ActivityB→Back→ActivityA→ ActivityB→Back→應用程序關閉。不好!
顯然,第二時間ActivityB所示,後退按鈕正在被處理Main
代替ActivityB
或MyGroup
。
我該如何解決這個問題?
編輯
我已經添加了一個ActivityC。看起來前兩個活動的行爲是正常的,從第三個活動開始,Main
活動處理按鈕按下。
所以A - >乙 - > A是被處理 - >乙 - >主
和A - >乙 - >乙 - - >主> C由一個處理。
使用'onKeyDown'或'onBackPressed'產生同樣的效果。 – nhaarman