Android ViewPager的简单使用
16lz
2021-01-23
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); } }}
更多相关文章
- C语言函数以及函数的使用
- Android 摇一摇功能的实现
- android Html Package机制说明
- Android 侧滑删除功能
- Android应用程序键盘(Keyboard)消息处理机制分析(28)
- android设备添加F1-F12按键功能
- Android实现自己的回调函数
- WebView控件中的javascript与Android本地功能交互
- Android Handler消息处理机制面试5连问