我有这样的布局。当出现此片段时,我想根据onCreateView
我正在使用下面的代码,以编程方式将下划线移至“两个”标签
lateinit var tabLayout : TabLayout
override fun onCreateView(): View? {
tabLayout.getTabAt(1)?.select()
return View
}
但不幸的是,该tabLayout.getTabAt(1)?.select()
代码将自动触发我的onTabSelectedListener
,如下面的代码
tabLayout.addOnTabSelectedListener(object: TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab?) {
// this part will automatically called
}
override fun onTabReselected(tab: TabLayout.Tab?) {
}
override fun onTabUnselected(tab: TabLayout.Tab?) {
}
})
那么如何在不触发onTabSelectedListener的情况下设置TabLayout位置呢?
Java没问题
答案 0 :(得分:1)
尝试此解决方案。它会为您提供帮助。
当您在那时手动选择时,请将addOnTabSelectedListener
设置为null,这样回调就不会出现。选择集addOnTabSelectedListener
之后。所以它将正常工作。
TabLayout.OnTabSelectedListener onTabSelectedListener = new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
};
tabLayout.addOnTabSelectedListener(null);
tabLayout.getTabAt(1).select();
tabLayout.addOnTabSelectedListener(onTabSelectedListener);
答案 1 :(得分:0)
尝试一下-
private void highLightCurrentTab(int position) {
for (int i = 0; i < tabLayout.getTabCount(); i++) {
TabLayout.Tab tab = tabLayout.getTabAt(i);
assert tab != null;
tab.setCustomView(null);
tab.setCustomView(adapter.getTabView(i));
}
在此处传递职位。
或者尝试一下-
new Handler().postDelayed(() -> {
myViewPager.setCurrentItem(position, true);
myTabLayout.setScrollPosition(position, 0f, true);
}, 100);