2015-08-08 7 views
16

Sto usando android.support.design.widget.TabLayout. Dispone di due schede, Se l'utente seleziona la seconda scheda In determinate condizioni, desidero che l'utente reindirizzi alla prima scheda e non lo consente di andare alla scheda sencond fino a quando la condizione non corrisponde. Per raggiungere questo obiettivo ho provato,android.support.design.widget.TabLayout seleziona Scheda programmaticamente

tabLayout.getTabAt(0).select(); 

ma non riselezionare prima scheda

+0

Invece di consentire loro di navigare e poi dover reindirizzare loro, può essere più facile per disabilitare la selezione scheda fino a quando le condizioni sono soddisfatte: http://stackoverflow.com/ domande/4497187/how-to-disable-a-tab-in-android-screen –

+0

@QuintinBalsdon, grazie, Ma l'esempio nel tuo collegamento è correlato a TabHost.It ha il metodo setEnable() in tabhost.getTabwidget. Sto usando il nuovo TabLayout nella libreria di supporto. – Pankaj

risposta

31

Ciò è dovuto al fatto che la vista non è ancora inizializzato correttamente, e si sta tentando di eseguire una certa azione.

Come soluzione, è sufficiente inserire un hadler prima di selezionare la scheda perpendicolare.

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

c'è la possibilità di ascoltare un evento (ad esempio onCreationComplete) .. in modo tale da implementare una soluzione basata su eventi, invece di utilizzare un timer con hard coding? – nish

+1

Suppongo che non ci sia un tale metodo per quello. – Mihir

0

È possibile selezionare la scheda in Fragment.onViewCreated().

3

Ecco come ho risolto:

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

Questa è la mia messa a punto. 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 layout delle schede sopra.

0

questo ha lavorato per me:

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