• 二十二、ViewPager


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

    三、效果图

    滑动屏幕实现左右切换

  • 相关阅读:
    python使用multiprocessing进行多进程编程(1)
    python使用multiprocessing进行多进程编程(1)
    最佳日志实践
    最佳日志实践
    最佳日志实践
    以大多数人的努力程度之低,根本轮不到去拼天赋
    以大多数人的努力程度之低,根本轮不到去拼天赋
    以大多数人的努力程度之低,根本轮不到去拼天赋
    C++Socket编程总结 [转]
    C++多线程的几个重要方法解析CreateEvent / SetEvent /ResetEvent/ 等
  • 原文地址:https://www.cnblogs.com/wangshunyun/p/16053200.html
Copyright © 2020-2023  润新知