androidviewpager(android viewpager2 fragment)

[img]

Android ViewPager:实现滑动页面

简介:

Android的ViewPager是一种扩展自ViewGroup的容器,它能够帮助我们实现滑动页面功能,常用于导航页面、广告轮播、新闻资讯等场景。

多级标题:

一、ViewPager的基本使用

二、ViewPager和Fragment的结合使用

三、ViewPager和TabLayout的结合使用

一、ViewPager的基本使用

1.在XML布局文件中添加ViewPager组件

2.在Activity中实例化ViewPager,并设置适配器

3.创建适配器PagerAdapter

4.为ViewPager添加页面滑动监听器(可选)

二、ViewPager和Fragment的结合使用

1.创建多个Fragment

2.创建适配器FragmentPagerAdapter或FragmentStatePagerAdapter

3.为ViewPager设置适配器,并绑定Fragment

4.为FragmentPagerAdapter实现生命周期方法

三、ViewPager和TabLayout的结合使用

1.在XML布局文件中添加TabLayout组件

2.在Activity中实例化ViewPager和TabLayout,并设置适配器

3.创建适配器FragmentPagerAdapter或FragmentStatePagerAdapter

4.绑定TabLayout和ViewPager

5.自定义TabLayout的样式

内容详细说明:

一、ViewPager的基本使用

1.在XML布局文件中添加ViewPager组件

```

android:id="@+id/view_pager"

android:layout_width="match_parent"

android:layout_height="match_parent" />

```

2.在Activity中实例化ViewPager,并设置适配器

```

ViewPager viewPager = findViewById(R.id.view_pager);

viewPager.setAdapter(adapter);

```

3.创建适配器PagerAdapter

```

public class MyPagerAdapter extends PagerAdapter {

private List mList;

public MyPagerAdapter(List list) {

mList = list;

}

@Override

public int getCount() {

return mList.size();

}

@Override

public boolean isViewFromObject(View view, Object object) {

return view == object;

}

@Override

public void destroyItem(ViewGroup container, int position, Object object) {

container.removeView(mList.get(position));

}

@Override

public Object instantiateItem(ViewGroup container, int position) {

container.addView(mList.get(position));

return mList.get(position);

}

```

4.为ViewPager添加页面滑动监听器(可选)

```

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override

public void onPageSelected(int position) {

}

@Override

public void onPageScrollStateChanged(int state) {

}

});

```

二、ViewPager和Fragment的结合使用

1.创建多个Fragment

```

public class MyFragment extends Fragment {

@Override

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

View view = inflater.inflate(R.layout.fragment_my, container, false);

return view;

}

```

2.创建适配器FragmentPagerAdapter或FragmentStatePagerAdapter

```

public class MyPagerAdapter extends FragmentPagerAdapter {

private List mList;

public MyPagerAdapter(FragmentManager fm, List list) {

super(fm);

mList = list;

}

@Override

public Fragment getItem(int position) {

return mList.get(position);

}

@Override

public int getCount() {

return mList.size();

}

@Override

public CharSequence getPageTitle(int position) {

return "Tab" + position;

}

```

3.为ViewPager设置适配器,并绑定Fragment

```

ViewPager viewPager = findViewById(R.id.view_pager);

List list = new ArrayList<>();

list.add(new MyFragment());

list.add(new MyFragment());

list.add(new MyFragment());

MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager(), list);

viewPager.setAdapter(adapter);

```

4.为FragmentPagerAdapter实现生命周期方法

```

public class MyPagerAdapter extends FragmentPagerAdapter {

private List mList;

public MyPagerAdapter(FragmentManager fm, List list) {

super(fm);

mList = list;

}

@Override

public Fragment getItem(int position) {

return mList.get(position);

}

@Override

public int getCount() {

return mList.size();

}

@Override

public void destroyItem(ViewGroup container, int position, Object object) {

super.destroyItem(container, position, object);

//移除Fragment

Fragment fragment = mList.get(position);

FragmentTransaction transaction = fragment.getFragmentManager().beginTransaction();

transaction.remove(fragment);

transaction.commit();

}

```

三、ViewPager和TabLayout的结合使用

1.在XML布局文件中添加TabLayout组件

```

android:id="@+id/tab_layout"

android:layout_width="match_parent"

android:layout_height="wrap_content"

app:tabMode="scrollable"

app:tabGravity="fill"/>

```

2.在Activity中实例化ViewPager和TabLayout,并设置适配器

```

ViewPager viewPager = findViewById(R.id.view_pager);

TabLayout tabLayout = findViewById(R.id.tab_layout);

List list = new ArrayList<>();

list.add(new MyFragment());

list.add(new MyFragment());

list.add(new MyFragment());

MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager(), list);

viewPager.setAdapter(adapter);

tabLayout.setupWithViewPager(viewPager);

```

3.创建适配器FragmentPagerAdapter或FragmentStatePagerAdapter

```

public class MyPagerAdapter extends FragmentPagerAdapter {

private List mList;

public MyPagerAdapter(FragmentManager fm, List list) {

super(fm);

mList = list;

}

@Override

public Fragment getItem(int position) {

return mList.get(position);

}

@Override

public int getCount() {

return mList.size();

}

@Override

public CharSequence getPageTitle(int position) {

return "Tab" + position;

}

```

4.绑定TabLayout和ViewPager

```

tabLayout.setupWithViewPager(viewPager);

```

5.自定义TabLayout的样式

```

TabLayout tabLayout = findViewById(R.id.tab_layout);

tabLayout.addTab(tabLayout.newTab().setText("Tab1"));

tabLayout.addTab(tabLayout.newTab().setText("Tab2"));

tabLayout.addTab(tabLayout.newTab().setText("Tab3"));

tabLayout.addTab(tabLayout.newTab().setText("Tab4"));

tabLayout.addTab(tabLayout.newTab().setText("Tab5"));

for (int i = 0; i < tabLayout.getTabCount(); i++) {

TabLayout.Tab tab = tabLayout.getTabAt(i);

if (tab != null) {

tab.setCustomView(R.layout.item_custom_tab);//设置自定义布局

TextView textView = Objects.requireNonNull(tab.getCustomView()).findViewById(R.id.tv_tab);

textView.setText("Tab" + i);//设置文本内容

}

```

标签列表