0

我有一个 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 处理。

4

2 回答 2

0

覆盖public void onBackPressed()您的活动并自己处理后退按钮。调用super.onBackPressed();将影响后退按钮按下的标准行为(也退出您的应用程序)

于 2011-08-24T11:32:30.370 回答
0

所以我找到了答案。

我的 中有一个 admob adview Main,这似乎是导致此问题的原因。这是xml:

    <?xml version="1.0" encoding="utf-8"?>
    <TabHost
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
        android:id="@android:id/tabhost"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"    
                    android:padding="0dp">
        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true" />
        <com.google.ads.AdView
            android:id="@+id/adView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            ads:adUnitId="@string/adkey"
            ads:adSize="BANNER"
            ads:loadAdOnCreate="false"
            android:layout_alignParentBottom="true" 
            android:focusable="false"/>
        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_above="@id/adView"
            android:layout_below="@android:id/tabs" />

    </RelativeLayout>
</TabHost>

当我删除 adview 时,问题不会发生。

现在为了解决这个问题,我将 xml 更改为:

<?xml version="1.0" encoding="utf-8"?>
<TabHost
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:padding="0dp">
            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true" />

            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_below="@android:id/tabs" />
        </RelativeLayout>
        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">
            <com.google.ads.AdView
                android:id="@+id/adView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                ads:adUnitId="@string/adkey"
                ads:adSize="BANNER"
                ads:loadAdOnCreate="false"
                android:layout_alignParentBottom="true"
                android:focusable="false" />
        </RelativeLayout>
    </FrameLayout>
</TabHost>
于 2011-08-24T14:22:56.513 回答