2015-08-08 68 views
16

我正在使用android.support.design.widget.TabLayout。 它有兩個選項卡, 如果用戶選擇第二個選項卡在特定條件下,我希望用戶重定向到第一個選項卡,並禁止他轉到第二個選項卡,直到條件匹配。 爲了實現這個我試過,android.support.design.widget.TabLayout選擇選項卡編程

tabLayout.getTabAt(0).select(); 

,但它不重新選擇第一個選項卡

+0

而不是讓他們來瀏覽,然後不得不對它們進行重定向,可能會更容易禁用選項卡選擇,直到滿足準則:http://stackoverflow.com/問題/ 4497187 /如何禁用一個選項卡在Android屏幕 –

+0

@QuintinBalsdon,謝謝, 但您的鏈接中的示例與TabHost.It有tabEnter()方法tabhost.getTabwidget中的方法。 我在支持庫中使用新的TabLayout。 – Pankaj

回答

31

這是因爲這種觀點仍然沒有初始化正確,和你想執行一些動作。

作爲解決方案,您只需在選擇合適的標籤之前放置一個哈德勒。

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

是否有任何可能性來監聽事件(即onCreationComplete)..以便實現基於事件的解決方案,而不是使用硬編碼的定時器? – nish

+1

我想沒有這樣的方法。 – Mihir

0

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

3

這是我如何解決它:

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

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

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

不要忘記初始化上面的標籤佈局。

0

這爲我工作:

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