Android 에서 TabLayout 는 ViewPager 와 결합 하여 페이지 전환 을 실현 합 니 다.

1.사고 방향 실현
1.build.gradle 에 의존 도 를 추가 합 니 다.예 를 들 어:
compile 'com.android.support:support-v4:23.4.0'
compile 'com.android.support:design:23.4.0'
support-v4 를 appcompat-v7 로 바 꿀 수도 있 습 니 다.예 를 들 어:
compile 'com.android.support:appcompat-v7:23.4.0'
appcompat-v7 은 슈퍼 port-v4 에 의존 하기 때문이다.
더 많은 설명 은 공식 문서 슈퍼 port library 부분 을 참고 할 수 있 습 니 다.
2.xml 에 TabLayout 와 ViewPager 를 추가 합 니 다.예 를 들 어:

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

  <android.support.design.widget.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/tabLayoutBackground"
    app:tabMode="scrollable"
    app:tabTextColor="@color/color_white"
    app:tabSelectedTextColor="@color/tabSelectedText"
    app:tabIndicatorHeight="3dp"
    app:tabIndicatorColor="@color/color_white"/>

  <android.support.v4.view.ViewPager
    android:id="@+id/view_pager"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

</LinearLayout>

TabLayout:
(1)tabMode 는 두 가지 속성 이 있 습 니 다.하 나 는"scrollable"입 니 다.다 중 탭 에 사용 합 니 다.다른 하 나 는'fixed'입 니 다.탭 이 적 으 면 모든 탭 이 화면 에 평균 적 으로 분포 되 기 때문에 탭 이 많 을 수 없고 이름 도 길 어 서 는 안 됩 니 다.그렇지 않 으 면 완전 하지 않 습 니 다.
(2)tabIndicator 는 텍스트 아래 의 지시 바 를 가리킨다.tab 을 선택 하면 표시 줄 이 텍스트 아래 에 나타 납 니 다.
3.뷰 대상 가 져 오기

TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
4.Fragment StatePagerAdaper 의 하위 클래스 를 만 들 고 구조 방법 을 실현 합 니 다.

  public class ViewPagerAdapter extends FragmentStatePagerAdapter {
    public ViewPagerAdapter(FragmentManager fm) {
      super(fm);
    }
  }
 이 클래스 의 인 스 턴 스 대상 을 만 듭 니 다.
ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager()); 
이 단계 에서 Fragment Pager Adapter 를 실현 하 는 하위 클래스 나 Fragment State Pager Adapter 를 실현 하 는 하위 클래스 를 선택 할 수 있 습 니 다.
Fragment PagerAdapter 는 페이지 수가 적은 경우,Fragment 의 수량 이 적은 경우 에 사 용 됩 니 다.사용자 가 현재 Activity 에 머 물 러 있 는 한 그 중의 Fragment 는 소각 되 지 않 기 때문에 메모리 소모 가 비교적 큽 니 다.
한편,Fragment StatePagerAdapter 의 작업 원 리 는 ListView 와 유사 하 다.사용자 가 볼 수 없 는 Fragment 만 있 으 면 모두 소각 되 고 상태 만 유지 된다.
v4 호 환 패키지 의 Fragment 를 사용 하기 때문에 getSupportFragment Manager()로 Fragment Manager 를 가 져 와 야 합 니 다.
5.ViewPager 와 TabLayout 설정

 viewPager.setAdapter(viewPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
2.완벽 한 어댑터
1.다시 쓰 는 세 가지 방법

  public class ViewPagerAdapter extends FragmentStatePagerAdapter {

    ......

    @Override
    public Fragment getItem(int position) {
      return null;
    }

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

    @Override
    public CharSequence getPageTitle(int position) {
      return super.getPageTitle(position);
    }
  }

2.tab 의 제목 데이터 만 들 기:
 private String[]mTitles=new String[]{"국어","영어","수학","물리","생물","화학","지리","정치","역사"};
Fragment 의 하위 클래스 만 들 기:

public class ViewPagerFragment extends Fragment {

  private static final String KEY = "extra";
  private String mMessage;

  public ViewPagerFragment() {
  }

  public static ViewPagerFragment newInstance(String extra) {
    Bundle args = new Bundle();
    args.putString(KEY, extra);
    ViewPagerFragment fragment = new ViewPagerFragment();
    fragment.setArguments(args);
    return fragment;
  }
}

Fragment 의 집합 대상 을 만 들 고 집합 에 인 스 턴 스 대상 을 추가 합 니 다.

private ArrayList<ViewPagerFragment> mViewPagerFragments = new ArrayList<>();

    ......

    for (int i = 0; i < mTitles.length; i++) {
      mViewPagerFragments.add(ViewPagerFragment.newInstance(mTitles[i]));
    }

 3.Adapter 의 방법 수정

public class ViewPagerAdapter extends FragmentStatePagerAdapter {

    private String[] titles;
    private ArrayList<ViewPagerFragment> viewPagerFragments;

    public ViewPagerAdapter(FragmentManager fm) {
      super(fm);
    }

    public void setTitles(String[] titles) {
      this.titles = titles;
    }

    public void setFragments(ArrayList<ViewPagerFragment> viewPagerFragments) {
      this.viewPagerFragments = viewPagerFragments;
    }

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

    @Override
    public int getCount() {
      return viewPagerFragments.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
      return titles[position];
    }
  }

 4.Adapter 에 게 데 이 터 를 전달 합 니 다.

 viewPagerAdapter.setTitles(mTitles);
viewPagerAdapter.setFragments(mViewPagerFragments); 

3.프 래 그 먼 트 보완
1、fragment_view_pager_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:orientation="vertical"
       android:layout_width="match_parent"
       android:layout_height="match_parent">

  <TextView
    android:id="@+id/fragment_text"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"/>

</LinearLayout>

2.Fragment 를 보완 하 는 방법

public class ViewPagerFragment extends Fragment {

  ......

  @Override
  public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bundle bundle = getArguments();
    if (bundle != null) {
      mMessage = bundle.getString(KEY);
    }
  }

  @Nullable
  @Override
  public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_view_pager_item, container, false);
    TextView textView = (TextView) view.findViewById(R.id.fragment_text);
    textView.setText(mMessage);
    return view;
  }
}

Fragment 를 만 들 때 onCreate 방법 을 사용 합 니 다.그 중에서 일부 상태 정보의 초기 화 를 실행 하여 일시 정지 또는 정지 후의 복구 에 사용 합 니 다.
Fragment 에서 보 기 를 처음 불 러 올 때 onCreateView 방법 을 사용 합 니 다.보 기 를 불 러 오고 초기 화 합 니 다.이 Fragment 레이아웃 의 루트 보 기 를 되 돌려 줍 니 다.그 중에서 inflate 방법의 세 번 째 매개 변 수 는 불 러 온 레이아웃(R.layot.fragmentview_pager_item)container 라 는 ViewGroup 에 추가 합 니 다.공식 문서 의 설명 에 따 르 면,지난번 에 그렇게 하면 시스템 이 이 레이아웃 을 container 에 추 가 했 기 때문에,여 기 는 false 입 니 다.
 정적 효과 그림:

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기