0

アプリケーションは、タブの下にあるフラグメント画面を更新する次のコードをtabsすべて選択することで実現しています。tab

public class MainActivity extends ActionBarActivity{
    Fragment f = null;
    TabFragment tf = null;
    List<Fragment> fragList = new ArrayList<Fragment>();
    int tabIndex;

    public void onTabSelected(Tab tab, FragmentTransaction ft) {        
        tabIndex = tab.getPosition();       

        if (fragList.size() > tab.getPosition())
            fragList.get(tab.getPosition());

        if (f == null) {
            tf = new TabFragment();
            Bundle data = new Bundle();
            data.putInt("index",  tabIndex);
            data.putString("extraString", "noreloading");
            tf.setArguments(data);
            fragList.add(tf);
        }
        else
            tf = (TabFragment) f;

        ft.replace(android.R.id.content, tf);       
    }

したがって、各タブで更新するフラグメント クラスは 1 つだけです。
すべてが正常に機能しています。にフラグメントがありませんbackstack。それが私が欲しかったものです。しかし、そのオプションを選択することでメニューが表示さactionbarれ、新しいコンテンツでフラグメントをリロードする必要があります。そこで、メインアクティビティで次のことを行いました。

    public void menuSelected(){
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction ft = fragmentManager.beginTransaction();

        // fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)  added clear backstack here no use.           

        tf = new TabFragment();
        Bundle data = new Bundle();
        data.putInt("index",  tabIndex);
        data.putString("extraString",  "reload");
        tf.setArguments(data);
        fragList.add(tf);
        ft.addToBackStack(null);
        ft.commit();

        ft.replace(android.R.id.content, tf);
    }
}

ここで何が起こるか、新しいデータでリロードされますが、戻るボタンbackstackを押すと前のフラグメントが存在します。 したがって、にフラグメントは必要ありません。フラグメントのコンテンツを置き換え/リロードしたいだけです。 誰かがこれを解決する方法を提案できますか? 完全に 2 つのフラグメントがあると仮定すると、1 つは前のフラグメントで、もう 1 つはリロードされたフラグメントです。別のメニューを押してからもう一度メニューを押すと、全部で 4 つのフラグメントがあります。
backstack
tab

4

0 に答える 0