0

TabHost を実装しました。1 つのタブには、ボタン クリック後に Activity2 を呼び出す Activity1 があり、ボタン クリック後に Activity3 を呼び出し、ボタン クリック後に Activity1 を呼び出します。バックスタック機能は必要ありません。1 --> 2 --> 3 だけです。 --> 1 など。3 つのすべてのアクティビティには、個別のレイアウト ファイルがあります。

1 から 2 への最初の遷移の後、アクティビティが画面全体を取得し、タブが永久に非表示になることを除いて、すべて正常に動作します。

質問: これらの 3 つのアクティビティをタブ領域の制限内に保ち、タブを表示するにはどうすればよいですか? この問題は、これまで何度も認識されてきました。ソリューションは以前は ActivityGroups でしたが、これらは推奨されておらず、代わりに Fragments を使用することをお勧めします。ここで多くの例を見てきましたが、私を助けるものは何もありませんでした.

  • 3 つのアクティビティ (アクティビティ 1 がアクティビティを拡張するなど) を保持できますか?
  • レイアウト ファイルにフラグメント タグを追加する必要がありますか?
  • トランザクションを処理する必要がありますか?
  • 1 つまたは 3 つのフラグメント クラスで作業する必要がありますか?

どうすればいいのか、ヒントをいくつか教えてください。使用する必要があるクラスとそのタイプを教えていただければ、すでに助かります。

前もって感謝します。

4

1 に答える 1

0

半日以上かかりましたが、ようやくうまくいく解決策を見つけました。残念ながら、私はまだ非推奨の問題 (Activity Group と getLocalActivityManager().startActivity(..)) に悩まされています。

ここでも、TabHost の下に 1 つのタブがあり、いくつかのアクティビティがあり、すべてそのタブ内で動作します。あるアクティビティから次のアクティビティへのナビゲーションは、ボタンクリックで発生します。解決:

  • タブ内で動作するすべてのアクティビティは、ActivityGroup を拡張する必要があります

  • すべての Activity クラスには、次のような次のアクティビティにリンクするボタン ハンドラーが必要です。

    public void onBtnClicked(View view) { インテント インテント = 新しいインテント (view.getContext(), NextActivity.class); replaceContentView("NextActivity", インテント); }

    public void replaceContentView(String id, Intent newIntent) { ビュー ビュー = getLocalActivityManager().startActivity(id, newIntent. addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView(); this.setContentView(ビュー); }

これにより、必要に応じてタブが常に表示されたままになります。これが誰かに役立つことを願っています。

于 2013-03-29T16:37:44.300 に答える