簡體   English   中英

android.support.design.widget.TabLayout以編程方式選擇標簽

[英]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);

這是我解決的方法:

tabLayout.getTabAt(CurrentItem).getCustomView().setSelected(true);

這對我有用:

int tabIndex = 2;
tabLayout.setScrollPosition(tabIndex,0f,true);
viewPager.setCurrentItem(tabIndex);

您可以在Fragment.onViewCreated()選擇選項卡。

這是我的設置。 對我來說很好。

      //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();

為時已晚,但可能會對其他開發人員有所幫助。

如果您走進去,看看tabLayout.getTabAt(tabIndex).select(); 已在內部實現。 您將了解到,它將您的流程發送到

onTabReselected(tab: TabLayout.Tab?)

而且你的流量不會流向

onTabSelected(tab: TabLayout.Tab?)

如果您當前的tabtabIndex相同。 因此,考慮這一點非常重要。

Mihir的回答給了我一個嘗試的想法。 似乎它在沒有硬編碼計時器的情況下也可以工作,並且還可以正確更新所選標簽的滾動條:

final TabLayout tabLayout = ...;
tabLayout.postOnAnimation(new Runnable() {
    @Override
    public void run() {
        tabLayout.getTabAt(2).select();
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM