Android App 은 ViewPager 에서 Fragment 의 인 스 턴 스 설명 을 사용 합 니 다.
android.support.v4.view 가방 의 Fragment 이지 android.app 가방 의 Fragment 가 아 닙 니 다.
v4 가방 에 있 는 Fragment 를 사용 하 는 Activity 는 Fragment Activity 에서 계승 해 야 합 니 다.
사실 Fragment 를 사용 하 는 것 은 앞에서 Fragment 를 사용 하지 않 는 것 과 매우 유사 합 니 다.
첫 번 째 단 계 는 홈 레이아웃 파일 에 ViewPager 구성 요 소 를 넣 습 니 다.
두 번 째 단 계 는 각 페이지 에 레이아웃 파일 을 만 들 고 인터페이스 를 작성 합 니 다.
세 번 째 단 계 는 각 페이지 에 Fragment 클래스 를 새로 만 들 고 레이아웃 파일 의 인터페이스 를 불 러 옵 니 다.
4 부 는 ViewPager 로 Adapter 를 설 정 했 습 니 다.다만 여기 Adapter 는 PagerAdapter 가 아니 라 바 뀌 었 습 니 다.
Fragment PagerAdapter,두 가지 방법 을 실현 합 니 다.
getCount():페이지 수 를 되 돌려 줍 니 다.
getItem(position):position 위치의 Fragment 를 되 돌려 줍 니 다.
다음은 ViewPager 와 Fragment 가 페이지 슬라이딩 효 과 를 실현 하 는 예 를 살 펴 보 겠 습 니 다.
우선 FragmentActivity 를 계승 하고,
ViewPager 에 전시 에 필요 한 Fragment 와 Fragment Pager Adapter 를 제공 합 니 다.
Fragment 에서 페이지 의 레이아웃 과 기능 을 지정 합 니 다.
// fragment
private class MyFragment extends Fragment {
private String text;
private int color;
public MyFragment(String text, int color) {
this.text = text;
this.color = color;
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
TextView tv = new TextView(MainActivity.this);
tv.setBackgroundColor(color);
tv.setText(text);
return tv;
}
}
adapter 는 이 Viewpager 에 몇 페이지 가 있 는 지,그 위 치 를 표시 할 페이지 를 지정 합 니 다.
// adapter
private class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return pages.size();
}
@Override
public Fragment getItem(int arg0) {
return pages.get(arg0);
}
}
OnPageChangeListener 를 설정 합 니 다.페이지 가 바 뀌 었 을 때 다른 작업 을 해 야 할 지 지정 합 니 다.
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
LinearLayout.LayoutParams lp = (android.widget.LinearLayout.LayoutParams) tabline.getLayoutParams();
lp.leftMargin = (int) ((arg0 + arg1) * mTabLineWidth);
tabline.setLayoutParams(lp);
}
@Override
public void onPageSelected(int arg0) {
// set titles
for (int i = 0; i < titles.size(); i++) {
if (arg0 == i) {
titles.get(i).setSelected(true);
} else {
titles.get(i).setSelected(false);
}
}
}
전체 코드:
package com.hzy.myviewpager;
import java.util.ArrayList;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.hzy.myviewpager.R.id;
public class MainActivity extends FragmentActivity implements OnPageChangeListener, OnClickListener {
ViewPager pager = null;
View tabline = null;
private int mTabLineWidth;
// titles
TextView title1 = null;
TextView title2 = null;
TextView title3 = null;
ArrayList<TextView> titles = null;
ArrayList<Fragment> pages = null;
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
initView();
initTabline();
}
private void initView() {
setContentView(R.layout.activity_main);
pages = new ArrayList<Fragment>();
titles = new ArrayList<TextView>();
pager = (ViewPager) findViewById(id.main_viewpager);
title1 = (TextView) findViewById(id.main_tab1);
title2 = (TextView) findViewById(id.main_tab2);
title3 = (TextView) findViewById(id.main_tab3);
title1.setOnClickListener(this);
title2.setOnClickListener(this);
title3.setOnClickListener(this);
titles.add(title1);
titles.add(title2);
titles.add(title3);
// create new fragments
pages.add(new MyFragment("tab1", Color.BLUE));
pages.add(new MyFragment("tab2", Color.RED));
pages.add(new MyFragment("tab3", Color.CYAN));
// set adapter
pager.setAdapter(new MyAdapter(getSupportFragmentManager()));
pager.setOnPageChangeListener(this);
pager.setCurrentItem(0);
titles.get(0).setSelected(true);
}
// tablines
private void initTabline() {
tabline = findViewById(id.main_tab_line);
Display display = getWindow().getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics();
display.getMetrics(outMetrics);
mTabLineWidth = outMetrics.widthPixels / 3;
LayoutParams lp = tabline.getLayoutParams();
lp.width = mTabLineWidth;
tabline.setLayoutParams(lp);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case id.main_tab1:
pager.setCurrentItem(0, true);
break;
case id.main_tab2:
pager.setCurrentItem(1, true);
break;
case id.main_tab3:
pager.setCurrentItem(2, true);
break;
default:
break;
}
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
LinearLayout.LayoutParams lp = (android.widget.LinearLayout.LayoutParams) tabline.getLayoutParams();
lp.leftMargin = (int) ((arg0 + arg1) * mTabLineWidth);
tabline.setLayoutParams(lp);
}
@Override
public void onPageSelected(int arg0) {
// set titles
for (int i = 0; i < titles.size(); i++) {
if (arg0 == i) {
titles.get(i).setSelected(true);
} else {
titles.get(i).setSelected(false);
}
}
}
// fragment
private class MyFragment extends Fragment {
private String text;
private int color;
public MyFragment(String text, int color) {
this.text = text;
this.color = color;
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
TextView tv = new TextView(MainActivity.this);
tv.setBackgroundColor(color);
tv.setText(text);
return tv;
}
}
// adapter
private class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return pages.size();
}
@Override
public Fragment getItem(int arg0) {
return pages.get(arg0);
}
}
}
코드 에 서 는 OnPageChangeListener 인 터 페 이 스 를 통 해 페이지 표시 줄 의 위 치 를 수 동 으로 설정 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android ViewPager로 무한 스크롤 가능조금 조사해 보았더니, 라고 하는 기사가 돈피샤였습니다. 영어 기사라고 하는 것과, 데이터의 갱신에 대해서는 접하고 있지 않다(조금 유스 케이스가 다르다), 라고 하는 것으로 여기에 정리해 보겠습니다. ViewPag...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.