当前位置:首页 » 《随便一记》 » 正文

学习笔记------viewpager_一只有浓密黑发的程序猿的博客

7 人参与  2022年05月12日 08:19  分类 : 《随便一记》  评论

点击全文阅读


viewpager

看到带view的控件基本都避免不了两个要素:适配器和数据源。
其中适配器是每个安卓开发人员最为头疼的东西。适配器怎么使用呢,一般都是要继承Adapter或其子类。今天来讲讲viewpager的使用。

  1. 首先布局中加入viewpager控件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <androidx.viewpager.widget.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

然后在活动中获取控件对象

   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        ViewPager vp=(ViewPager)findViewById(R.id.vp);
        
    }
  1. 构造适配器,创建个viewpager继承PagerAdatper,实现其方法。
class viewpageadapter extends PagerAdapter {
        private List<View> views;//layout集合
        public viewpageadapter(List<View> view) {
            this.views = view;
        }

        @Override
        public int getCount() {
            return views.size();//返回layout数量
        }

        @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(views.get(position));//直接添加进viewgroup中
            return views.get(position);
        }

        @Override
        public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
            views.remove(views.get(position));
        }


    }

在这里插入图片描述

  1. 构造数据源
    我们使用三个layout布局作为viewpager数据
    在这里插入图片描述
    在活动中获取三个layout的对象
  private List<View> viewList=new ArrayList<>();//传layout集合给适配器
  LayoutInflater layout = getLayoutInflater().from(this);
    View layout1 = layout.inflate(R.layout.layout1, null);
    View layout2 = layout.inflate(R.layout.layout2, null);
    View layout3 = layout.inflate(R.layout.layout3, null);
    viewList.add(layout1);
    viewList.add(layout2);
    viewList.add(layout3);
  1. 将数据放入适配器
 viewpageadapter viewpageadapter=new viewpageadapter(viewList);//创建适配器对象
        vp.setAdapter(viewpageadapter);//viewpager设置适配器
  1. 源码
 package com.example.viewpage;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;

import android.content.Context;
import android.os.Bundle;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private List<View> viewList=new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        LayoutInflater layout = getLayoutInflater().from(this);
        View layout1 = layout.inflate(R.layout.layout1, null);
        View layout2 = layout.inflate(R.layout.layout2, null);
        View layout3 = layout.inflate(R.layout.layout3, null);
        viewList.add(layout1);
        viewList.add(layout2);
        viewList.add(layout3);

        ViewPager vp=(ViewPager)findViewById(R.id.vp);
        viewpageadapter viewpageadapter=new viewpageadapter(viewList);
        vp.setAdapter(viewpageadapter);
    }
    class viewpageadapter extends PagerAdapter {
        private List<View> views;//layout集合
        public viewpageadapter(List<View> view) {
            this.views = view;
        }

        @Override
        public int getCount() {
            return views.size();//返回layout数量
        }

        @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(views.get(position));//直接
            return views.get(position);
        }

        @Override
        public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
             container.removeView(views.get(position));//移除容器内layout
        }


    }
}

示例:
在这里插入图片描述


点击全文阅读


本文链接:http://zhangshiyu.com/post/39950.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 穿越七零:大佬,你的孩子重生了后续+番外_颜希姜建军全文阅读_小说后续在线阅读_无删减免费完结_
  • 我换战队后,嫌我是草包大小姐的搭档悔疯了小众冷门_苏媛林夕林小姐完整文本_小说后续在线阅读_无删减免费完结_
  • 我抛弃赘婿去冲喜,黑道大佬却发疯了节选(许棠傅明礼)_我抛弃赘婿去冲喜,黑道大佬却发疯了节选许棠傅明礼
  • (野渡无人春迟归)野渡无人春迟归小说(顾清许岁宁)整书在线无广告高口碑小说
  • 竹断相思情不知彩蛋(林逸舟陆清晚)全书在线下载阅读完美终章小说大结局
  • 全文我抛弃赘婿去冲喜,黑道大佬却发疯了结局+番外+续集(许棠傅明礼)列表_全文我抛弃赘婿去冲喜,黑道大佬却发疯了结局+番外+续集
  • 放弃白眼狼父子后,我暴富了阅读_霍元峰戚茗瑶霍砚白独家番外_小说后续在线阅读_无删减免费完结_
  • 重回八零,改嫁纨绔子弟后前夫悔疯了免费品鉴_小说后续在线阅读_无删减免费完结_
  • 南枝意周随小说番外+结局(被迫冥婚,糙汉刑警撬开棺材救我)小说在线阅读
  • (头条)那夜后,疯批大佬跪哄娇软小可怜小说(厉璟渊沈听榆)整本免费版阅读无广告(那夜后,疯批大佬跪哄娇软小可怜)
  • 睁眼大婚日,我踹了渣夫抱紧金大腿(云筝厉无恙)_睁眼大婚日,我踹了渣夫抱紧金大腿云筝厉无恙
  • 师妹为了野男人要杀我的鸟惊天黑幕_慕容苏玉霜玉霜内容精选_小说后续在线阅读_无删减免费完结_

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1