ViewPager复用

ViewPager复用代码很简单,记录一下importandroid.support.v4.view.PagerAdapter;importandroid.support.v4.view.ViewPager;importandroid.support.v7.app.AppCompatActivity;importandroid.os.Bundle;importandroid.view.View;…

大家好,又见面了,我是你们的朋友全栈君。

代码很简单,记录一下
主要是用LinkedList在destroyItem中添加移除的View,在instantiateItem中复用移除的View。

import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

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

public class MainActivity extends AppCompatActivity { 
   

    private PagerAdapter mPagerAdapter;
    private List<String> mDataList = new ArrayList<>();
    private Button mUpdate, mDelete, mAdd, mClean;
    private LinkedList<View> mViewCache = new LinkedList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mDataList.add("1");
        mDataList.add("2");
        mDataList.add("3");
        mDataList.add("4");
        mDataList.add("5");

        ViewPager viewPager = findViewById(R.id.viewPager);
        viewPager.setAdapter(mPagerAdapter = new PagerAdapter() {
            @Override
            public int getCount() {
                return mDataList.size();
            }

            @Override
            public boolean isViewFromObject(View view, Object object) {
                return view == object;
            }


            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                View view = mViewCache.size() > 0 ? mViewCache.removeFirst() : null;
                String str = "";
                if (view == null) {
                    view = View.inflate(MainActivity.this, R.layout.item_pager, null);
                    str = "";
                } else{
                    str = "复用了position为= " + view.getTag() + " 的Item";
                }
                TextView textView = view.findViewById(R.id.pager_tv);
                textView.setText(str + "\n" +mDataList.get(position));
                view.setTag(position);
                container.addView(view);
                return view;
            }

            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
                View deleteView = (View) object;
                container.removeView(deleteView);
                mViewCache.add(deleteView);
            }

        });

    }

}

这里写图片描述

微信公众号
这里写图片描述

随意打赏
这里写图片描述

QQ群:365473065

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163220.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java中的 Set转List

    java中的 Set转List//构造Map数据 Map&lt;String,String&gt;map=newHashMap&lt;String,String&gt;(); map.put("ele1","小樱"); map.put("ele2","若曦"); map.put("ele3","晴川"); Set&lt;String&gt;s

    2022年10月18日
    2
  • python中用turtle画一个圆形(pythonturtle教程)

    最近发现一个很有意思的画图的python库,叫做turtle,这里先说下用turtle这个库来实现用正方形画圆的思路。每次都用乌龟(turtle)来画出一个正方形,然后通过旋转3°后,继续画一样的正方形,在通过120次循环后就实现了完整的圆,这里当然也可以用其他的角度和次数,只要能完成360度就可以了。先看完成的图形和代码。代码如下:importturtlewindow=turtle.Scr…

    2022年4月14日
    349
  • sqlserver2005备份集中的数据库备份与现有的数据库不同

    sqlserver2005备份集中的数据库备份与现有的数据库不同 使用SqlServer 2005还原 2000的备份数据库时,报备份集中的数据库备份与现有的数据库不同的错误.

    主要由于新建的数据与备份集中的不同导致

    解决办法:选项 -->还原选项 -->覆盖现有数据库 --> 确

    2022年5月7日
    37
  • 高并发解决方案-代理服务器Nginx[通俗易懂]

    高并发解决方案-代理服务器Nginx[通俗易懂]文章目录Nginx1.Nginx概念2.Nginx的应用场景3.Linux环境下Nginx的安装与启动4.Nginx静态网站部署5.Nginx配置虚拟主机5.1端口绑定5.2域名绑定5.2.1域名概念5.2.2域名级别5.2.3域名与ip绑定6.Nginx反向代理6.1反向代理概念6.2配置反向代理7.Nginx负载均衡7.1负载均衡概念7.2准备工作7.3配置负载均衡Nginx1.Nginx概念    Nginx是⼀款高性能的http服务器/反向代理服务器及电子

    2022年9月29日
    2
  • 固态硬盘坏了怎么恢复数据恢复不了_笔记本固态硬盘坏了数据能恢复吗

    固态硬盘坏了怎么恢复数据恢复不了_笔记本固态硬盘坏了数据能恢复吗今天的这篇经验和大家聊一聊关于固态硬盘坏了怎么恢复数据恢复的问题,希望能够帮助到有需要的朋友。方法/步骤 现在的电脑不用ssd简直对不起那么好的cpu,比较机械硬盘的速度才是目前整个电脑的性能瓶颈,而使用了ssd后,很多人都在说固态硬盘是不能恢复数据的,这是怎么回事呢?大家都知道传统的机械硬盘即便是数据删了,回收站清空了,只要不被大量的数据再次覆盖就可以恢复出原来的数据的,那么我什么这一点在ssd上不能用了呢?实测下来大多数默认的ssd数据丢失了都是10次有9次都恢复不了,为什么SSD的成…

    2025年12月10日
    2
  • SPRINGBOOT启动流程及其原理[通俗易懂]

    SPRINGBOOT启动流程及其原理[通俗易懂]SpringBoot、SpringMVC和Spring有什么区别? 一springboot启动原理及相关流程概览 二springboot的启动类入口 三单单是SpringBootApplication接口用到了这些注解   1)@Configuration注解   2)@ComponentScan注解 3)@EnableAutoConfiguration AutoConfigurationPackage注解: Import(AutoConfiguration…

    2025年8月28日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号