uoz 作業日記

様々な作業の記録を共有するブログです。

表示してないfragmentが勝手にうごいてる問題

理由

Action Barを使っていて、
最初にタブバーに追加したタブが勝手に選ばれて、
底に紐付けたフラグメントは自動的にインスタンスがつくられるからだった。


actionBar = getSupportActionBar();
actionBar.addTab(
    actionBar.newTab()
    .setText(R.string.tab_comment_cohesive)
    .setIcon(android.R.drawable.ic_menu_crop)
    .setTabListener(new TabListener<FragmentA>(
        MainActivity.this, 
        "FragmentA", FragmentA.class)));
actionBar.addTab(
    actionBar.newTab()
    .setText(R.string.tab_others_cohesive)
    .setIcon(android.R.drawable.ic_menu_edit)
    .setTabListener(new TabListener<FragmentB>(
        MainActivity.this,
        "FragmentB",FragmentB.class)));

actionBar.getTabAt(1).select();

こんなふうに2番目のタブを初期選択状態にしたつもりだったが、
その前に1番目のタブが選ばれた状態になるからだ。


FragmentAで通信とかしていて、うざいので本当にタブが選択されるまで
インスタンスを作らんようにしたいが、
このタブは一番左には表示したい。

どうしたものか。

解決

リファレンスを見ると、addTab()メソッドは実は4種類あった。
http://developer.android.com/reference/android/app/ActionBar.html#getSelectedNavigationIndex()


2番目の引数にタブを選択状態にするか否かをbooleanで指定するのを使えばよかった。

actionBar = getSupportActionBar();
actionBar.addTab(
    actionBar.newTab()
    .setText(R.string.tab_comment_cohesive)
    .setIcon(android.R.drawable.ic_menu_crop)
    .setTabListener(new TabListener<FragmentA>(
        MainActivity.this, 
        "FragmentA", FragmentA.class))
    ,false
    );
actionBar.addTab(
    actionBar.newTab()
    .setText(R.string.tab_others_cohesive)
    .setIcon(android.R.drawable.ic_menu_edit)
    .setTabListener(new TabListener<FragmentB>(
        MainActivity.this,
        "FragmentB",FragmentB.class))
   ,true
    );

こんな感じ

普通にpositionを指定できるaddTab()もあったし、いろいろやり方はあった。