我在应用程序中添加了tabLayout
,并且tabLayout
有3个表以显示三个不同的页面,现在我试图将一个表设置为“不可见”,但我不能这样做。
我尝试那样做
tabCalls.setVisibility(View.INVISIBLE);
但不起作用
如果有人知道什么是错误,请告诉我。
Logcat错误..
完整代码
public class MainActivityFargmain extends AppCompatActivity {
Toolbar toolbar;
TabLayout tabLayout;
ViewPager viewPager;
AdapterTableViewOrder adapterTableViewOrder;
TabItem tabChats;
TabItem tabStatus;
TabItem tabCalls;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.m_fragmant_view);
toolbar = findViewById(R.id.toolbar);
toolbar.setTitle(getResources().getString(R.string.app_name));
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
tabLayout = findViewById(R.id.tablayout);
tabChats = findViewById(R.id.tabChats);
tabStatus = findViewById(R.id.tabStatus);
tabCalls = findViewById(R.id.tabCalls);// That I want INVISIBLE
viewPager = findViewById(R.id.viewPager);
tabCalls.setVisibility(View.INVISIBLE);// like that I try to do
adapterTableViewOrder = new AdapterTableViewOrder(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapterTableViewOrder);
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
}
}
xml代码
NullPointerException
的问题,因为TabItem
是一个特殊的窗口小部件,无法使用findViewById()
对其进行充气。
相反,要在您的活动/片段中增加TabItem
:
TabLayout tabLayout = findViewById(R.id.tablayout);
// First TabItem
View item0 = ((ViewGroup) tabLayout.getChildAt(0)).getChildAt(0);
// Second TabItem
View item0 = ((ViewGroup) tabLayout.getChildAt(0)).getChildAt(1);
注意,它从索引0开始。因此第一个制表符索引为0。
要在您的代码中解决此问题:
删除这些行
TabItem tabCalls;
...
tabCalls = findViewById(R.id.tabCalls);// That I want INVISIBLE
并添加
View tabCalls;
...
// tabCalls is the third item, so we used index of 2
tabCalls = = ((ViewGroup) tabLayout.getChildAt(0)).getChildAt(2);
然后您可以正常设置可见性
tabCalls.setVisibility(View.INVISIBLE);