禁用TabLayout标签 [英] Disable Tabs in TabLayout
问题描述
我用 TabLayout
在我的应用程序的最新设计支持库。该标签附加到了哪些加载片段为每个标签一个viewpager。我想禁用所有选项卡,直到viewpager加载用户选择的标签的片段。我不能禁用tablayout或使其无法点击。我用了的setEnabled(假)
和 setClickable(假)
,但它不工作。我能够使它不可见使用 setVisiblity(View.GONE)
,但我想的标签在任何时候都可见。
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(假);
tabLayout.setClickable(假);
XML
android.support.design.widget.TabLayout结果
机器人:ID =@ + ID / tabLayout
机器人:layout_width =match_parent结果
机器人:layout_height =0dp结果
机器人:layout_weight =0.15结果
机器人:滚动条=水平结果
机器人:splitMotionEvents =FALSE>
块引用>@覆盖
公共无效onTabSelected(TabLayout.Tab标签){
开关(tab.getPosition()){
情况下0:
viewPager.setCurrentItem(tab.getPosition());
tab.setIcon(R.drawable.near_me_hover);
打破;
情况1:
viewPager.setCurrentItem(tab.getPosition());
tab.setIcon(R.drawable.all_hostels_hover);
打破;
案例2:
viewPager.setCurrentItem(tab.getPosition());
tab.setIcon(R.drawable.top_five_hover);
打破;
案例3:
viewPager.setCurrentItem(tab.getPosition());
tab.setIcon(R.drawable.advanced_search_hover);
打破;
}
} @覆盖
公共无效onTabUnselected(TabLayout.Tab标签){
开关(tab.getPosition()){
情况下0:
tab.setIcon(R.drawable.near_me);
打破;
情况1:
tab.setIcon(R.drawable.all_hostels);
打破;
案例2:
tab.setIcon(R.drawable.top_five);
打破;
案例3:
tab.setIcon(R.drawable.advanced_search); 打破;
} } @覆盖
公共无效onTabReselected(TabLayout.Tab标签){
}
});
viewPager.addOnPageChangeListener(新ViewPager.OnPageChangeListener(){
@覆盖
公共无效onPageScrolled(INT位置,浮positionOffset,诠释positionOffsetPixels){
} @覆盖
公共无效使用onPageSelected(INT位置){
tabLayout.getTabAt(位置)。选择();
} @覆盖
公共无效onPageScrollStateChanged(INT状态){ }
});
解决方案有由选项卡中单击监听器实现3种方法,其中之一就是 onTabSelected()把一个布尔条件检查,如果您的片段被初始化。然后,如果该条件被满足则允许交易发生。
您的片段code后也初始化标签页I have used
TabLayout
from the latest design support library in my app. The tabs are attached to a viewpager which loads the fragments for each tab. I want to disable all the tabs until the viewpager loads the fragment for user selected tab. I am not able to disable the tablayout or make it non-clickable. I had usedsetEnabled(false)
andsetClickable(false)
but it is not working. I am able to make it invisible by usingsetVisiblity(View.GONE)
but I want the tabs to be visible at all times.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
android:id="@+id/tabLayout" android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.15"
android:scrollbars="horizontal"
android:splitMotionEvents="false" >
@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) { } });
解决方案there are 3 methods implemented by the tab click listener, one of them is onTabSelected() put a boolean condition to check if your fragment is initialised. Then if that condition is satisfied then allow transaction to take place. Also initialize the tabs after your fragment code
这篇关于禁用TabLayout标签的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!