如何在不触发onTabSelectedListener的情况下设置TabLayout位置?

时间:2019-06-28 03:18:15

标签: android kotlin android-tablayout

enter image description here

我有这样的布局。当出现此片段时,我想根据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没问题

2 个答案:

答案 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);