Android ViewPager的简单使用

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);
        }

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值