2015-08-08 4 views
16

Я использую android.support.design.widget.TabLayout. Он имеет две вкладки: Если пользователь выбирает вторую вкладку. В конкретном состоянии я хочу, чтобы пользователь перенаправлялся на первую вкладку и запрещал ему переходить на вкладку sencond до тех пор, пока не будет выполнено условие. Для достижения этой цели я попытался,android.support.design.widget.TabLayout select Tab Programmatically

tabLayout.getTabAt(0).select(); 

но не повторно первой вкладке

+0

Вместо того, чтобы позволить им перемещаться, а затем того, чтобы перенаправить их, может быть проще отключить выбор вкладки, пока критерии не будут выполнены: http://stackoverflow.com/ вопросы/4497187/how-to-disable-a-tab-in-android-screen –

+0

@QuintinBalsdon, спасибо, Но пример в вашей ссылке связан с TabHost.It имеет метод setEnable() в tabhost.getTabwidget. Я использую новый TabLayout в библиотеке поддержки. – Pankaj

ответ

31

Это происходит потому, что точка зрения до сих пор не инициализируется правильно, и вы пытаетесь выполнить какое-либо действие.

В качестве решения вам нужно просто поставить один hadler перед тем, как выбрать перкулярную вкладку.

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); 
Смежные вопросы