2017-09-25 6 views
0

マイ・ナビゲーション・ドロワーは、フラグメントを使用して構築されています。フラグメントの1つにタブを表示したい。今のところ、何も表示されていません。ホームフラグメントは、ナビゲーションドロワーのホームアイコンをクリックするとアクセスされるフラグメントです。私はホームフラグメントの下に2つのタブを作成しようとしています。私はすでに各タブのクラスを作成しています。クラスはそれぞれのレイアウトを膨張させます。Aフラグメントにタブを表示するにはどうすればよいですか?

ホームフラグメント:

@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

関連する問題