次のようなタブを表示するアクティビティ ( 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 にいます。戻るボタン -> アプリが閉じます。わかった。
- アプリ起動時、ActivityA→ActivityB→戻るボタン→ActivityA。わかった。
- アプリが起動すると、ActivityA -> ActivityB -> Back -> ActivityA -> ActivityB -> Back -> アプリが閉じます。良くないですよ!
どうやら、ActivityB が 2 回目に表示されたときに、戻るボタンがまたはMain
ではなくによって処理されているようです。ActivityB
MyGroup
どうすればこれを修正できますか?
編集
ActivityC を追加しました。最初の 2 つのアクティビティの動作は正常なようで、3 つ目以降はMain
アクティビティがボタンの押下を処理します。
したがって、A -> B -> A は A -> B -> Main によって処理されます
A -> B -> C は A -> B -> Main によって処理されます。