Domanda android.support.design.widget.TabLayout seleziona Tab a livello di programmazione


Sto usando android.support.design.widget.TabLayout. Ha due schede, Se l'utente seleziona la seconda scheda In condizioni particolari, desidero che l'utente reindirizzi alla prima scheda e non lo consente di andare alla scheda Sencond fino a quando la condizione non coincide. Per raggiungere questo ho provato,

tabLayout.getTabAt(0).select(); 

ma non riseleziona la prima scheda


18
2017-08-08 08:24


origine


risposte:


Questo perché quella vista non lo è ancora inizializzato correttamente, e stai cercando di eseguire qualche azione.

Come soluzione, devi solo metterne uno hadler prima di selezionare la scheda perticolare.

new Handler().postDelayed(
    new Runnable(){
        @Override
        public void run() {
            tabLayout.getTabAt(yourTabIndex).select();
        }
}, 100);

36
2017-08-10 12:15



Ecco come l'ho risolto:

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

3
2018-03-08 19:33



Questa è la mia configurazione. funziona bene per me

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

non dimenticare di inizializzare il tuo tab layout sopra.


0
2018-04-12 10:43



Puoi selezionare la scheda in Fragment.onViewCreated().


0
2018-01-10 13:49



Questo ha funzionato per me:

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

0
2017-12-23 09:52



La risposta di Mihir mi ha dato l'idea di provarlo. Sembra che funzioni senza il timer hardcoded e aggiorna correttamente lo scroll per la scheda selezionata:

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

0
2017-07-08 14:28