package com.example.myapplication;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import java.util.ArrayList;
import java.util.List;
public class Activity_viewPager extends AppCompatActivity {
private ViewPager viewPager;
private List<View> pagerList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_pager);
addView();//添加三个view
viewPager = findViewById(R.id.viewPager);
/****
* 设置viewPager的适配器,由于PagerAdapter是抽象类,所以在此实例化,并重写四个抽象方法
* 关于方法作用的说法,摘自https://segmentfault.com/q/1010000000484617,待考证
* 前提概念:
* ViewPager里面对每个页面的管理是key-value形式的,也就是说每个page都有个对应的id(id是object类型),需要对page操作的时候都是通过id来完成的
*
* 首先看这个函数
* public Object instantiateItem(ViewGroup container, int position);
* 这是pageAdapter里的函数,功能就是往PageView里添加自己需要的page。同时注意它还有个返回值object,这就是那个id。
*
* 最后
* public abstract boolean isViewFromObject (View view, Object object)
* 这个函数就是用来告诉框架,这个view的id是不是这个object。
* 谷歌官方推荐把view当id用,所以常规的instantiateItem()函数的返回值是你自己定义的view,而isViewFromObject()的返回值是view == object。
*
* ps:感觉这个机制应该是历史遗留问题,属于改bug改出来的机制。否则官方不会推荐这种把view当id的做法。
*/
viewPager.setAdapter(new PagerAdapter() {
@Override
public int getCount() {
return pagerList.size();//返回view的个数
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
container.addView(pagerList.get(position));//功能就是往PageView里添加自己需要的page。同时注意它还有个返回值object,这就是那个id
return pagerList.get(position);
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView(pagerList.get(position));
}
});
}
//把三个view即三个界面添加到List中
void addView(){
{
View view = LayoutInflater.from(this).inflate(R.layout.viewpager_view, null);
ImageView imageView = view.findViewById(R.id.imageView);
imageView.setBackgroundColor(Color.RED);
pagerList.add(view);
}{
View view = LayoutInflater.from(this).inflate(R.layout.viewpager_view, null);
ImageView imageView = view.findViewById(R.id.imageView);
imageView.setBackgroundColor(Color.GREEN);
pagerList.add(view);
}{
View view = LayoutInflater.from(this).inflate(R.layout.viewpager_view, null);
ImageView imageView = view.findViewById(R.id.imageView);
imageView.setBackgroundColor(Color.YELLOW);
pagerList.add(view);
}{
View view = LayoutInflater.from(this).inflate(R.layout.viewpager_view, null);
ImageView imageView = view.findViewById(R.id.imageView);
imageView.setBackgroundColor(Color.BLUE);
pagerList.add(view);
}
}
}