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; } } });
というやっつけ感満載の対応策でした.