android.support.design.widget.TabLayout select 以编程方式制表
android.support.design.widget.TabLayout select Tab Programmatically
我正在使用 android.support.design.widget.TabLayout。
它有两个选项卡,
如果用户选择第二个选项卡在特定条件下,我希望用户重定向到第一个选项卡并不允许他转到第二个选项卡,直到条件匹配。
为此,我尝试了,
tabLayout.getTabAt(0).select();
但它不会重新选择第一个选项卡
这是因为该视图仍未正确初始化,而您正在尝试执行某些操作。
作为一种解决方案,您只需在选择特定选项卡之前放置一个 hadler。
new Handler().postDelayed(
new Runnable(){
@Override
public void run() {
tabLayout.getTabAt(yourTabIndex).select();
}
}, 100);
您可以select Fragment.onViewCreated()
中的选项卡。
我是这样解决的:
tabLayout.getTabAt(CurrentItem).getCustomView().setSelected(true);
这是我的设置。对我来说很好。
//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);
}
别忘了在上方初始化您的选项卡布局。
这对我有用:
int tabIndex = 2;
tabLayout.setScrollPosition(tabIndex,0f,true);
viewPager.setCurrentItem(tabIndex);
Mihir 的回答给了我尝试这个的想法。似乎它在没有硬编码计时器的情况下也能正常工作,并且还可以正确更新所选选项卡的滚动:
final TabLayout tabLayout = ...;
tabLayout.postOnAnimation(new Runnable() {
@Override
public void run() {
tabLayout.getTabAt(2).select();
}
});
tabLayout.getTabAt(index specific).select();
为时已晚,但它可能会对其他开发人员有所帮助。
如果你进去看看tabLayout.getTabAt(tabIndex).select();
里面是怎么实现的。你会知道,它会将你的流量发送到
onTabReselected(tab: TabLayout.Tab?)
并且您的流量不会转到
onTabSelected(tab: TabLayout.Tab?)
如果您的当前选项卡和tabIndex相同。所以这是非常重要的考虑因素。
我正在使用 android.support.design.widget.TabLayout。 它有两个选项卡, 如果用户选择第二个选项卡在特定条件下,我希望用户重定向到第一个选项卡并不允许他转到第二个选项卡,直到条件匹配。 为此,我尝试了,
tabLayout.getTabAt(0).select();
但它不会重新选择第一个选项卡
这是因为该视图仍未正确初始化,而您正在尝试执行某些操作。
作为一种解决方案,您只需在选择特定选项卡之前放置一个 hadler。
new Handler().postDelayed(
new Runnable(){
@Override
public void run() {
tabLayout.getTabAt(yourTabIndex).select();
}
}, 100);
您可以select Fragment.onViewCreated()
中的选项卡。
我是这样解决的:
tabLayout.getTabAt(CurrentItem).getCustomView().setSelected(true);
这是我的设置。对我来说很好。
//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);
}
别忘了在上方初始化您的选项卡布局。
这对我有用:
int tabIndex = 2;
tabLayout.setScrollPosition(tabIndex,0f,true);
viewPager.setCurrentItem(tabIndex);
Mihir 的回答给了我尝试这个的想法。似乎它在没有硬编码计时器的情况下也能正常工作,并且还可以正确更新所选选项卡的滚动:
final TabLayout tabLayout = ...;
tabLayout.postOnAnimation(new Runnable() {
@Override
public void run() {
tabLayout.getTabAt(2).select();
}
});
tabLayout.getTabAt(index specific).select();
为时已晚,但它可能会对其他开发人员有所帮助。
如果你进去看看tabLayout.getTabAt(tabIndex).select();
里面是怎么实现的。你会知道,它会将你的流量发送到
onTabReselected(tab: TabLayout.Tab?)
并且您的流量不会转到
onTabSelected(tab: TabLayout.Tab?)
如果您的当前选项卡和tabIndex相同。所以这是非常重要的考虑因素。