6

我在我的應用程序中使用了最新設計支持庫中的TabLayout。這些選項卡連接到爲每個選項卡加載片段的viewpager。我想要禁用所有選項卡,直到viewpager爲用戶選擇的選項卡加載片段。我無法禁用Tablayout或使其無法點擊。我曾使用setEnabled(false)setClickable(false),但它不起作用。我可以通過使用setVisiblity(View.GONE)使其不可見,但我希望標籤始終可見。禁用TabLayout中的選項卡

tabLayout = (TabLayout) findViewById(R.id.tabLayout); 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
    tabLayout.setTabMode(TabLayout.MODE_FIXED); 
    tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.near_me_hover).setTag(1)); 
    tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.all_hostels).setTag(2)); 
    tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.top_five).setTag(3)); 
    tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.advanced_search).setTag(4)); 
    tabLayout.setEnabled(false); 
    tabLayout.setClickable(false); 

XML

android.support.design.widget.TabLayout
機器人:ID = 「@ + ID/tabLayout」 機器人:layout_width = 「match_parent」
機器人: layout_height =「0dp」
android:layout_weight =「0.15」
android:scrollbars =「horizo​​ntal」
款Android:splitMotionEvents =「假」>

 @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      switch (tab.getPosition()) { 
       case 0: 
        viewPager.setCurrentItem(tab.getPosition()); 
        tab.setIcon(R.drawable.near_me_hover); 
        break; 
       case 1: 
        viewPager.setCurrentItem(tab.getPosition()); 
        tab.setIcon(R.drawable.all_hostels_hover); 
        break; 
       case 2: 
        viewPager.setCurrentItem(tab.getPosition()); 
        tab.setIcon(R.drawable.top_five_hover); 
        break; 
       case 3: 
        viewPager.setCurrentItem(tab.getPosition()); 
        tab.setIcon(R.drawable.advanced_search_hover); 
        break; 
      } 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 
      switch (tab.getPosition()) { 
       case 0: 
        tab.setIcon(R.drawable.near_me); 
        break; 
       case 1: 
        tab.setIcon(R.drawable.all_hostels); 
        break; 
       case 2: 
        tab.setIcon(R.drawable.top_five); 
        break; 
       case 3: 
        tab.setIcon(R.drawable.advanced_search); 

        break; 
      } 

     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 
     } 
    }); 
    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
     } 

     @Override 
     public void onPageSelected(int position) { 
      tabLayout.getTabAt(position).select(); 
     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 

回答

0

存在由選項卡中單擊監聽器實現3種方法,其中之一是onTabSelected()把一個布爾條件檢查,如果您的片段被初始化。那麼如果這個條件得到滿足,那麼允許交易發生。 您的片段代碼之後還初始化標籤

+1

你能提供任何示例代碼嗎? –

+0

你可以發佈你到目前爲止嘗試過的嗎 –

+0

我已經發布了我已經使用過的代碼。 –

-2

如果你的意思是禁用TabLayout一個選項卡按鈕,然後試試這個代碼:

tabHost.getTabWidget().getChildTabViewAt(your_index).setEnabled(false); 
+2

是不是tabhost不同於我用過的tablayout? –

+0

你可以嘗試如果有任何問題,然後讓我知道我會檢查出來。 –

+0

我認爲設計支持庫中的tabhost和tablayout完全不同。所以我不能使用這種方法。 –

3

另一個竅門:

你可以把另一張空白的透明視圖直到您的需求滿足爲止。當您需要啓用/顯示選項卡時,只需隱藏空白視圖即可。

相關問題