setVisibility不适用于tabLayout-TabItem返回findViewById()的NullPointerException

问题描述 投票:0回答:1

我在应用程序中添加了tabLayout,并且tabLayout有3个表以显示三个不同的页面,现在我试图将一个表设置为“不可见”,但我不能这样做。

我尝试那样做

tabCalls.setVisibility(View.INVISIBLE);

但不起作用

如果有人知道什么是错误,请告诉我。

Logcat错误..

enter image description here

完整代码


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代码

enter image description here

android android-tablayout
1个回答
0
投票

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);
© www.soinside.com 2019 - 2024. All rights reserved.