Android(安卓)ViewPager的简单使用
16lz
2021-12-04
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 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); } }}
更多相关文章
- Android强制联网
- Android睡眠统计图实现
- 【Android】自定义 Tabhost
- Android动态生成RadioButton
- Android(安卓)jni的调用过程JNI_OnLoad(),利用Android(安卓)NDK
- Android(安卓)Window类
- Android(安卓)M 新的运行时权限开发者需要知道的一切
- android之NFC基础技术分享
- Android(安卓)M 新的运行时权限开发者需要知道的一切