2017-09-25 4 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

관련 문제