2015-08-08 59 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); 
相关问题