5

http://developer.android.com/resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabs.htmlに示されているように、FragmentTabsを実装しようとしています。私がこれをするまで、すべてがうまくいきました:

私は次のような1つのタブから多くの異なるフラグメントを開始しました:

tab1->フラグメント1--->フラグメント2--->フラグメント3

tab2

しかし、tab2に切り替えて再びtab1に戻ると、fragment3ではなくfragment1画面が表示されます(つまり、最初のタブに3つのフラグメントがあり、3番目のフラグメントにいるときに、2番目のタブに切り替えた後、最初のタブに戻ります。 3番目ではなく1番目のフラグメントに移動します)。

        @Override
        public void onTabChanged(String tabId) {
            TabInfo newTab = mTabs.get(tabId);
            if (mLastTab != newTab) {
                FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction();
                if (mLastTab != null) {
                    if (mLastTab.fragment != null) {
                        ft.detach(mLastTab.fragment);
                    }
                }
                if (newTab != null) {
                    if (newTab.fragment == null) {
                        newTab.fragment = Fragment.instantiate(mActivity,
                                newTab.clss.getName(), newTab.args);
                        ft.add(mContainerId, newTab.fragment, newTab.tag);
                    } else {
                        ft.attach(newTab.fragment);
                    }
                }

                mLastTab = newTab;
                ft.commit();
                mActivity.getSupportFragmentManager().executePendingTransactions();
            }
        }

attach()とdetatch()にコメントすると、次のようになります。

ここに画像の説明を入力してください

4

2 に答える 2

2

詳細がなければ、具体的に何が悪いのかを言うのは難しい. しかし、個人的な経験から言えば、最初にフラグメント タブを実装しなければならなかったとき、機能するものを見つけるまでに多くのひどいチュートリアルを経ました。最終的に私にとって意味のあるチュートリアルはここにあります: http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/

おまけとして、いくつかの Github ソース コードもあります: https://github.com/mitchwongho/Andy/tree/master/Andy/src/com/andy/fragments/tabs

于 2012-05-15T17:09:19.707 に答える
2

アップデート:

元のコードを保持し、フラグメントのトラバーサル状態を維持する方法をonTabChanged使用することをお勧めします。ing またはing fragmentのように、1 つのフラグメントから次のフラグメントに移動するときにaddToBackStack呼び出します。addToBackStackaddreplace

またTabInfo.fragment、タブ内のフラグメント間の遷移を反映するように参照を変更します。


タブを切り替えるたびに着脱しないでください。

   @Override
    public void onTabChanged(String tabId) {
        TabInfo newTab = mTabs.get(tabId);
        if (mLastTab != newTab) {
            FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction();

            if (newTab != null) {
                if (newTab.fragment == null) {
                    newTab.fragment = Fragment.instantiate(mActivity,
                            newTab.clss.getName(), newTab.args);
                    ft.add(mContainerId, newTab.fragment, newTab.tag);
                } else {
                    ft.replace(mContainerId, newTab.fragment, newTab.tag);
                } 
            }
            mLastTab = newTab;
            ft.commit();
            mActivity.getSupportFragmentManager().executePendingTransactions();
        }
    }
于 2012-05-19T05:04:59.063 に答える