0

タブアクティビティと5つの子アクティビティがあります。
タブアクティビティはランチャーアクティビティです。

アクティビティ1がを使用して開始されるtabHost.setCurrentTabByTag(CommonParams.HOME_TAG);と、電話の戻るボタンを押すと、Actvitiy1のOnBackPressedが起動します。

しかし、アクティビティ1を開始し、2番目のタブをクリックしてアクティビティ2に移動し、1番目のタブをクリックしてアクティビティ1に戻ると、電話の戻るボタンを押してもOnBackPressed()は起動しません。アプリを終了させます。

次のコードでタブプレスのアクティビティをロードします。

        intent = new Intent().setClass(this, Activity1.class);
        spec = tabHost
                .newTabSpec(CommonParams.HOME_TAG)
                .setIndicator("Home",
                        res.getDrawable(R.drawable.ic_tab_home))
                .setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, Activity2.class);
        spec = tabHost
                .newTabSpec(CommonParams.PAGE2_TAG)
                .setIndicator("Page2",
                        res.getDrawable(R.drawable.ic_tab_page2))
                .setContent(intent);
        tabHost.addTab(spec);

そのため、ホームからPage2に移動し、タブを使用してホームに戻ると、アクティビティ1は新しく開始されません。再開されます。再開されたアクティビティでOnBackPressed()が起動されていないと思います。

活動が焦点を失ったようなものですか?もしそうなら、アクティビティがフォーカスを失うのを避ける方法、またはアクティビティOnResume()にフォーカスを与える方法は?

誰かがOnBackPressedが起動しない理由と、それを機能させる方法を見つけるのを手伝ってくれませんか。

前もって感謝します

4

1 に答える 1

1

あなたが説明しているのは、Androidの通常/デフォルトの動作です。それはまさにそれが機能するように設計された方法です。別の方法で動作させたい場合onBackPressed()は、メインタブアクティビティのコールバックをオーバーライドして自分で実装する必要があります。

とにかく-達成したい動作のために-タブとTabActivity、ではなく、Fragmentsを使用することをお勧めしますFragmentManager。フラグメントには、必要な理由で戻るボタンのリクエストを処理するメカニズムが組み込まれています。Androidではとにかくそれを使用することをお勧めします。そのため、Honeycomb以降、ずっと前に TabActivity 非推奨になり、Androidフラグメント指向のAPIを追加するFroyoとGingerbreadに競争力が提供されました。

これはグーグルがドキュメントに書いたものですTabActivity

新しいアプリケーションでは、このクラスの代わりにフラグメントを使用する必要があります。古いデバイスで引き続き実行するには、DONUTまで互換性のあるバージョンのFragmentAPIを提供するv4サポートライブラリを使用できます。

グーグルはもう使われることを望まTabActivityない。

于 2012-08-08T05:37:02.520 に答える