2

在項目中,我創建通過ViewPager我的TabBar這樣的:的Android刪除的TabBar(隱藏)動態

MainActivity.java

mViewPager = (ViewPager) findViewById(R.id.content_main_viewpager); 

     if (mViewPager != null) { 
      final ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 

      adapter.addFragment(new LandingSearch(), ""); 
      adapter.addFragment(new LandingWiki(), ""); 
      adapter.addFragment(new LandingForum(), ""); 

      mViewPager.setAdapter(adapter); 
      mViewPager.setOffscreenPageLimit(3); 

      final TabLayout tabs = (TabLayout) findViewById(R.id.content_main_tabs); 

      if (tabs != null) { 
       tabs.post(new Runnable() { 
        @Override 
        public void run() { 
         tabs.setupWithViewPager(mViewPager); 
         tabs.getTabAt(0).setIcon(R.drawable.ic_tab_search); 
         tabs.getTabAt(1).setIcon(R.drawable.ic_tab_favorite); 
         tabs.getTabAt(2).setIcon(R.drawable.ic_tab_forum); 
        } 
       }); 

      } 
     } 

app_bar_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:fitsSystemWindows="true" 
tools:context="com.mathleaks.MainActivity"> 

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:popupTheme="@style/AppTheme.PopupOverlay" /> 

</android.support.design.widget.AppBarLayout> 

    <include layout="@layout/content_main" /> 

<com.mathleaks.ui.util.MainViewPager 
    android:id="@+id/content_main_viewpager" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    android:visibility="visible" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 


</com.mathleaks.ui.util.MainViewPager> 

<android.support.design.widget.TabLayout 
    android:id="@+id/content_main_tabs" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:tabMode="fixed" 
    app:tabGravity="center" 
    android:animateLayoutChanges="true" 
    android:background="@color/background" 
    app:background="@color/background" 
    app:layout_scrollFlags="scroll|enterAlways" > 

</android.support.design.widget.TabLayout> 

</LinearLayout> 

現在我想在應用程序中發生特殊事件時在我的第二個tabBar片段(LandingWiki)中隱藏我的tabBar在運行時。到目前爲止,我還沒有成功。在

final TabLayout tabs = (TabLayout)findViewById(R.id.content_main_tabs); 
tabs.setVisibility(View.GONE); 

結果:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.design.widget.TabLayout.setVisibility(int)' on a null object reference 

回答

3

這可能是由findViewById指片段,而不是主要活動造成的事實。

你可以做到以下幾點:從你的片段中(後onActivityCreated事件)

final TabLayout tabs = (TabLayout)getActivity().findViewById(R.id.content_main_tabs); 
tabs.setVisibility(View.GONE);