二十二、ViewPager
一、PagerAdapter 的方法
getCount()
获得viewpager中有多少个view
instantiateltem()
1.将给定位置的jiew添加到ViewGroup(容器)中,创建并显示出来
2.返回一个代表新增页面的Object(key),通常都是直接返回view本身就可以了,当然你也可以自定义自己的key,但是key和每个view要一 一对应的关系
isViewFromObject()
判断instantiateltem(ViewGroup, int)函数所返回来的Key与一个页面视图是否是代表的同一个视图(即它俩是否是对应的,对应的表示同一个View),通常我们直接写 return view== object
destroyltem()
移除一个给定位置的页面。适配器有责任从容器中删除这个视图。这是为了确保在finishUpdate(viewGroup)返回时视图能够被移除。而另外两个方法则是涉及到一个key的东东:
二、代码示例
1.ui界面布局
1 2 3 4 5 6 7 8 9 10 11 12 | <?xml version= "1.0" encoding= "utf-8" ?> <LinearLayout android:layout_width= "match_parent" android:layout_height= "match_parent" android:orientation= "vertical" xmlns:android= "http://schemas.android.com/apk/res/android" > <androidx.viewpager.widget.ViewPager android:id= "@+id/viewpager1" android:layout_width= "match_parent" android:layout_height= "match_parent" /> </LinearLayout> |
创建下图代码所示,创建三个xml页面,分别时 layout1 layout2 layout3;更改文字和文字颜色,显示不同的效果展示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?xml version= "1.0" encoding= "utf-8" ?> <LinearLayout android:layout_width= "match_parent" android:layout_height= "match_parent" android:orientation= "vertical" xmlns:android= "http://schemas.android.com/apk/res/android" > <TextView android:layout_centerInParent= "true" android:id= "@+id/textView" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:text= "布局1" android:textColor= "#F40202" android:textSize= "60sp" /> </LinearLayout> |
1.后台代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | package com.example.myapplication; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.viewpager.widget.PagerAdapter; import java.util.List; public class MyAdapter extends PagerAdapter { //创建页面集合 private List<View> mListView; public MyAdapter(List<View> mListViews){ this .mListView = mListViews; } /** * 获取ViewPager中有多少个view * */ @Override public int getCount() { return mListView.size(); } /** * 判断是否相等 * */ @Override public boolean isViewFromObject( @NonNull View view, @NonNull Object object) { return view == object; } /** * 将给定位位置view加到ViewGroup容器中,创建并显示 * */ @NonNull @Override public Object instantiateItem( @NonNull ViewGroup container, int position) { container.addView(mListView.get(position), 0 ); return mListView.get(position); } /** * 销毁view * */ @Override public void destroyItem( @NonNull ViewGroup container, int position, @NonNull Object object) { container.removeView(mListView.get(position)); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | package com.example.myapplication; import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.ViewPager; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); //渲染子页面 LayoutInflater from=getLayoutInflater().from( this ); View view1 = from.inflate(R.layout.layout1, null ); View view2 = from.inflate(R.layout.layout2, null ); View view3 = from.inflate(R.layout.layout3, null ); //添加数据集合 List<View> listView = new ArrayList<>(); listView.add(view1); listView.add(view2); listView.add(view3); ViewPager viewPager = findViewById(R.id.viewpager1); MyAdapter myAdapter = new MyAdapter(listView); viewPager.setAdapter(myAdapter); } } |
三、效果图
滑动屏幕实现左右切换
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现