Как установить позицию табуляции без запуска onTabSelectedListener? - PullRequest
0 голосов
/ 28 июня 2019

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?

Java в порядке

Ответы [ 2 ]

1 голос
/ 28 июня 2019

Попробуйте это решение.это поможет вам.

, когда вы выбираете вручную в это время, установите addOnTabSelectedListener ноль, поэтому обратный вызов не будет поступать.после выбора установить 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);
0 голосов
/ 28 июня 2019

Попробуйте это -

 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);
...