带有选项卡和活动组的后退按钮行为



我有一个活动(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;
}

所以MainMyGroup有一个标签。MyGroupActivityA开始,然后到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。Backbutton -> app关闭。好的。
  • 应用启动时,ActivityA -> activitb ->后退按钮-> ActivityA。好的。
  • 当app启动时,ActivityA -> activitb -> Back -> ActivityA ->ActivityB ->返回->应用程序关闭。不可以!

显然,第二次显示ActivityB时,后退按钮由Main处理,而不是ActivityBMyGroup

我该如何解决这个问题?

编辑

我已经添加了一个活动c。似乎前两个活动的行为是正常的,从第三个开始,Main活动处理按钮按下。

所以A -> B -> A由A -> B -> Main处理

和A -> B -> C由A -> B -> Main处理。

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

我找到了答案。

我有一个admob的建议在我的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>

当我删除通知时,问题就不会发生了。

现在为了解决这个问题,我将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>

相关内容

  • 没有找到相关文章

最新更新