2017-09-25 99 views
0

我的導航抽屜使用碎片構建。我想顯示其中一個片段的選項卡。到目前爲止,沒有任何顯示。主頁片段是在點擊導航抽屜上的主圖標時訪問的片段。我試圖在主頁片段下創​​建兩個標籤,但沒有任何成功。我已經爲每個標籤創建了一個類。這些課程膨脹了他們各自的佈局。如何顯示片段上的標籤?

首頁片段:

@Override 

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup 
    container, @Nullable Bundle savedInstanceState){ 

    View view = inflater.inflate(R.layout.daily_data_fragment, null); 
    //Adding toolbar to the activity 
    Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar); 
    ((AppCompatActivity)getActivity()).setSupportActionBar(toolbar); 

    //Initializing the tablayout 
    tabLayout = (TabLayout) view.findViewById(R.id.tabLayout); 

    //Adding the tabs using addTab() method 
    tabLayout.addTab(tabLayout.newTab().setText("ADD DATA")); 
    tabLayout.addTab(tabLayout.newTab().setText("VIEW ARCHIVE")); 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 

    //Initializing viewPager 
    viewPager = (ViewPager) view.findViewById(R.id.pager); 

    //Creating our pager adapter 
    DailyDataPageAdapter adapter = new DailyDataPageAdapter(getActivity().getSupportFragmentManager(), tabLayout.getTabCount()); 

    //Adding adapter to pager 
    viewPager.setAdapter(adapter); 

    //Adding onTabSelectedListener to swipe views 
    tabLayout.setOnTabSelectedListener(this); 

    tabLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      tabLayout.setupWithViewPager(viewPager); 
     } 
    }); 

    return view; 

} 

適配器類別:

public class DailyDataPageAdapter extends FragmentStatePagerAdapter { 
    int tabCount; 

public DailyDataPageAdapter(FragmentManager fm, int tabCount){ 
    super(fm); 
    this.tabCount = tabCount; 
} 
@Override 
public Fragment getItem(int position) { 

    switch (position){ 
     case 0: 
      AddData addData = new AddData(); 
      return addData; 
     case 1: 
      ViewArchive viewArchive = new ViewArchive(); 
      return viewArchive; 
     default: 
      return null; 
    } 

} 

@Override 
public int getCount() { 
    return tabCount; 
} 
} 

佈局:

<LinearLayout 
android:id="@+id/main_layout" 
android:orientation="vertical" 
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" 
tools:context=".home_activity"> 

<!-- our toolbar --> 
<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?attr/colorPrimary" 
    android:minHeight="?attr/actionBarSize" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    android:visibility="visible" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

<!-- our tablayout to display tabs --> 
<android.support.design.widget.TabLayout 
    android:id="@+id/tabLayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@color/colorgray" 
    android:minHeight="?attr/actionBarSize" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    android:visibility="visible" /> 

<!-- View pager to swipe views --> 
<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" 
    android:visibility="visible" /> 
</LinearLayout> 
+1

您可以在'HomeFragment'內創建一個'TabLayout'和'ViewPager'。順便說一句,爲什麼你在你的片段'onCreateView()'中處理工具欄?難道你沒有一個容器活動的所有片段和工具欄定義在此活動的佈局? – Mehmed

回答

0

你可以這樣做。

public class HomeFragment extends Fragment { 

private Toolbar toolbar; 
private TabLayout tabLayout; 
private ViewPager viewPager; 
// Fragment List 
private final List<Fragment> mFragmentList = new ArrayList<>(); 
// Title List 
private final List<String> mFragmentTitleList = new ArrayList<>(); 
private ViewPagerAdapter adapter; 


@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.daily_data_fragment,container,false); 

    // init view 
    toolbar = (Toolbar) view.findViewById(R.id.toolbar); 
    viewPager = (ViewPager) view.findViewById(R.id.pager); 
    tabLayout = (TabLayout) view.findViewById(R.id.tabLayout); 

    ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); 
    ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    // add title to the list 
    mFragmentTitleList.add("one"); 
    mFragmentTitleList.add("two"); 
    mFragmentTitleList.add("three"); 

    // add fragment to the list 
    mFragmentList.add(new OneFragment()); 
    mFragmentList.add(new TwoFragment()); 
    mFragmentList.add(new ThreeFragment()); 

    setupViewPager(viewPager); 

    tabLayout.setupWithViewPager(viewPager); 
    // Tab ViewPager setting 
    viewPager.setOffscreenPageLimit(mFragmentList.size()); 
    tabLayout.setupWithViewPager(viewPager); 
    tabLayout.setTabsFromPagerAdapter(adapter); 
    return view; 
} 


private void setupViewPager(ViewPager viewPager) { 

    adapter = new ViewPagerAdapter(getChildFragmentManager(), mFragmentList, mFragmentTitleList); 

    viewPager.setAdapter(adapter); 
} 

/** 
* ViewPagerAdapter setting 
*/ 
class ViewPagerAdapter extends FragmentPagerAdapter { 
    private List<Fragment> mFragmentList = new ArrayList<>(); 
    private List<String> mFragmentTitleList = new ArrayList<>(); 

    public ViewPagerAdapter(FragmentManager fm, List<Fragment> fragments, List<String> titleLists) { 
     super(fm); 
     this.mFragmentList = fragments; 
     this.mFragmentTitleList = titleLists; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragmentList.get(position); 
    } 

    @Override 
    public int getCount() { 
     return mFragmentList == null ? 0 : mFragmentList.size(); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitleList.get(position); 
    } 
} 
} 
+0

添加建議後仍未顯示選項卡。 –

+0

刪除'TabLayout'的'android:theme =「@ style/ThemeOverlay.AppCompat.Dark.ActionBar」'並在代碼中嘗試它。 – KeLiuyue

+0

並確保你的'HomeFragment'正常顯示在你的'Activity'中。是否創建了「HomeFragment」? – KeLiuyue