Android.support.design.widget.TabLayoutを使用しています。 2つのタブがあります。特定の条件で2番目のタブを選択した場合、ユーザーが最初のタブにリダイレクトし、条件が一致するまでsencondタブに移動できないようにします。これを達成するために、私は試しました、
tabLayout.getTabAt(0).select();
しかし、それは最初のタブを再選択しません
これは、そのビューがまだinitializedではなく、何らかのアクションを実行しようとしているためです。
解決策として、1つだけを置く必要があります特定のタブを選択する前にハドラー。
new Handler().postDelayed(
new Runnable(){
@Override
public void run() {
tabLayout.getTabAt(yourTabIndex).select();
}
}, 100);
これは私がそれを解決した方法です:
tabLayout.getTabAt(CurrentItem).getCustomView().setSelected(true);
これは私のために働いた:
int tabIndex = 2;
tabLayout.setScrollPosition(tabIndex,0f,true);
viewPager.setCurrentItem(tabIndex);
これが私のセットアップです。私にとってはうまくいきます。
//declare your tabs to be add on
TabLayout tlDailyView;
private TabLayout.Tab tabAppointment, tabSlots;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_daily_view, container, false);
initializeMembers();
setupTabLayout();
return view;
}
private void setupTabLayout() {
tlDailyView.addTab(tabAppointment, 0, true);
tlDailyView.addTab(tabSlots, 1, true);
tlDailyView.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
switch (tab.getPosition()) {
case 0:
//open fragment at position 0 here
case 1:
//open fragment at position 1 here
break;
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
private void initializeMembers() {
tabSlots = tlDailyView.newTab();
tabAppointment = tlDailyView.newTab();
tabAppointment.setText(R.string.tab_appts).select();
tabSlots.setText(R.string.tab_slots);
}
上記のタブレイアウトを初期化することを忘れないでください。
tabLayout.getTabAt(index specific).select();
Fragment.onViewCreated()
でタブを選択できます。