一、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界面布局
<?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;更改文字和文字颜色,显示不同的效果展示
<?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.后台代码
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)); } }
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); } }
三、效果图
滑动屏幕实现左右切换