TORA LOG

好きなことをまとめるBlog

TabLayoutの初期タブ(2)

以前このような記事を書きました. TabLayoutの初期タブ - TORA LOG

解決方法?と言いますか,これも怪しいですが解決方法を考えてみました.

TabLayout tabs = (TabLayout)v.findViewById(R.id.tablayout);

tabs.addTab(topTab.newTab().setText("1"));
tabs.addTab(topTab.newTab().setText("2"));
tabs.addTab(topTab.newTab().setText("3"));

tabs.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabReselected(TabLayout.Tab tab) {
                changeTab(tab.getPosition());
            }
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                changeTab(tab.getPosition());
            }
            private void changeTab(int position){
                switch (position){
                    case 0:
                        break;
                    case 1:
                        break;
                    case 2:
                        break;
                }
            }
});
tabs.getTabAt(0).select();

つまり,「選択されているタブをまた選択」しても「タブが切り替わった」としてしまおうということです. 以下のようにしてもいいですね.

tabs.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabReselected(TabLayout.Tab tab) {
                onTabSelected(tab);
            }
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                switch (tab.getPosition()){
                    case 0:
                        break;
                    case 1:
                        break;
                    case 2:
                        break;
                }
            }
});

問題は「選択されているタブをまた選択」でタブが再読込されることですかね. その場合はフラグで処理するしか…?

tabs.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            private boolean startUp = true;
            @Override
            public void onTabReselected(TabLayout.Tab tab) {
                if(startUP){
                    startUp = false;
                    onTabSelected(tab);
                }
            }
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                switch (tab.getPosition()){
                    case 0:
                        break;
                    case 1:
                        break;
                    case 2:
                        break;
                }
            }
});

というやっつけ感満載の対応策でした.