2

私は Android アプリケーションでTabListenerこれに似たものを使用しています: http://developer.android.com/guide/topics/ui/actionbar.html#Tabs

私のonTabSelected実装:

public void onTabSelected(Tab tab, FragmentTransaction ft) {
    Fragment preInitFrag = mActivity.getFragmentManager().findFragmentByTag(mTag);
    if (preInitFrag == null) {
        mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs);
        ft.add(android.R.id.content, mFragment, mTag);
    } else {
        ft.attach(preInitFrag);
    }
}

タブが選択されるたびに、バックスタックに追加したいと考えています。これどうやってするの?でパラメーターftを使用するとft.addToBackStack("test")、機能しません。致命的な例外をスローします。

java.lang.RuntimeException:
    Unable to start activity ComponentInfo{.../...BaseActivity}:
java.lang.IllegalStateException:
    This FragmentTransaction is not allowed to be added to the back stack.
4

2 に答える 2

3

質問でリンクしたActionBar ガイドには、バック スタックについて次のように書かれています (タブ リスナーのサンプル コードの下の「注意」セクション)。

また、これらのフラグメント トランザクションをバック スタックに追加することもできません。

ガイドには理由が説明されていませんが、必要なものはサポートされていません。タグの履歴を別の方法で保持するか、タブの履歴をまったく保持しないようにする必要があります。

于 2013-02-23T20:58:42.633 に答える
0

onTabChanged コールバック内に独自の FragmentTrasaction を作成し、commit(); を試します。以下のリンクを確認してください。

FragmentTransaction はバックスタックに追加できませんか?

于 2014-03-11T17:22:56.017 に答える