ViewPager+下拉刷新ListView超强组合(实现360手机助手首页的效果)

Scrollview中嵌套ViewPager和ListView常出现的问题 Scrollview中嵌套ViewPager和ListView常出现的问题: ViewPager如果在Scrollview中使用,并且宽高指定为match_parent或者wrap_content则不会显示内容,但是如果将高度指定为200dp,则ViewPager则会将内容显示到屏幕上 ListView同ViewPager类似,必须指定固定高度之后,才可以显示相应的高度,否则只显示一个Item的内容高度,然后在ListView区域上下滑动时,Scrollview并没有效果,而是实现的是ListView的上下滚动事件。 立即下载

转载请注明出处:http://blog.youkuaiyun.com/hello_chillax/article/details/45599215,谢谢~

想必大家都用过360手机助手,效果是不是很绚丽,其实很好实现喽。今天就来说一说怎么去实现喽~(PS:咱们是讲原理和思路,我这里是用的不是360助手的界面,懒得去扒那些图片喽,太懒,见谅~~)

首先,上图:
这里写图片描述

先看一下工程目录结构:
这里写图片描述

其中有两个包,第一个里面分别是:
Data:工程里面的数据,本来想用几个textview填充ListView的,最后感觉这样会效果好一点,米啥用~
MainActivity:不说了~
Model:LIstView的每个item我都抽象出一个model,
RollViewPager:大家也看到了,上面的那个ViewPager是会自己跳动的,为了实现这个效果,这里重写了ViewPager。

另外一个包则是下拉刷新,上拉加载的ListView,是一个开源的东东~GitHub上有~

这里重点说一下整个效果的思路:

其实PullToRefreshListView内部维护了一个普通的ListView,并且实现了上拉加载,下拉刷新效果。然后我们在此基础之上加了一个自动翻滚的ViewPager,就实现了上面的效果。

代码:

MainActivity.java:

//初始化View
private void initView() {
        ptrLV = (PullToRefreshListView) findViewById(R.id.ptr_lv);
        // 滚动到底自动加载可用
        ptrLV.setPullRefreshEnabled(true);
        // 下拉刷新可用
        ptrLV.setPullLoadEnabled(false);
        // 滚动到底自动加载可用
        ptrLV.setScrollLoadEnabled(true);
        // 得到实际的ListView并设置监听器:
        ptrLV.getRefreshableView().setOnItemClickListener(
                new OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> parent, View view,
                            int position, long id) {
                        Toast.makeText(MainActivity.this,
                                "您点击的是第 " + position + " 个条目~",
                                Toast.LENGTH_SHORT).show();
                    }
                });
        // 自定义adapter:
        ptrLV.getRefreshableView().setAdapter(new MyAdapter());
        // 获取header的一个视图:
        topView = (ViewGroup) getLayoutInflater().inflate(
                R.layout.layout_roll_view, null);
        // 设置圆点:
        dotsView = (LinearLayout) topView.findViewById(R.id.dots_ll);
        initDot(4);
        // 设置ListView的Header
        viewPager = new RollViewPager(this, dotList, R.drawable.dot_focus,
                R.drawable.dot_normal, new OnPagerClickCallback() {

                    @Override
                    public void onPagerClick(int position) {
                        Toast.makeText(MainActivity.this,
                                "您点击的是第 " + (position+1) + " 张图片~",
                                Toast.LENGTH_SHORT).show();
                    }
                });

        // 设置图片的路径
        int[] ids = new int[] { R.drawable.news_1, R.drawable.news_2,
                R.drawable.news_3, R.drawable.news_4 };
        viewPager.setResImageIds(ids);
        // 设置图片的标题
        ArrayList<String> list = new ArrayList<String>();
        list.add("我是第1标题~~");
        list.add("我是第2标题~~");
        list.add("我是第3标题~~");
        list.add("我是第4标题~~");
        viewPager.setTitle(
                (TextView) topView.findViewById(R.id.top_news_title), list);
        // 设置ViewPager开始转动
        viewPager.startRoll();
        pagerLy = (LinearLayout) topView.findViewById(R.id.top_news_viewpager);
        pagerLy.removeAllViews();
        pagerLy.addView(viewPager);
        // 添加header
        if (ptrLV.getRefreshableView().getHeaderViewsCount() < 1) {
            ptrLV.getRefreshableView().addHeaderView(topView);
        }
    }

    private void initDot(int size) {
        dotList = new ArrayList<View>();
        for (int i = 0; i < size; i++) {
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                    10, 10);
            params.setMargins(5, 0, 5, 0);
            View dot = new View(this);
            if (i == 0) {
                dot.setBackgroundResource(R.drawable.dot_focus);
            } else {
                dot.setBackgroundResource(R.drawable.dot_normal);
            }
            dot.setLayoutParams(params);
            dotList.add(dot);
            dotsView.addView(dot);
        }
    }

    class MyAdapter extends BaseAdapter {
        @Override
        public int getCount() {
            return dataList.size();
        }

        @Override
        public Object getItem(int position) {
            return dataList.get(position);
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder = new ViewHolder();
            if (convertView == null) {
                convertView = getLayoutInflater().inflate(
                        R.layout.list_item_stytle, null);
                convertView.setTag(holder);
                holder.user_image = (ImageView) convertView
                        .findViewById(R.id.user_image);
                holder.publish_user = (TextView) convertView
                        .findViewById(R.id.publish_user);
                holder.publish_at = (TextView) convertView
                        .findViewById(R.id.publish_at);
                holder.title = (TextView) convertView.findViewById(R.id.title);
                holder.body = (TextView) convertView.findViewById(R.id.body);
                holder.mark = (TextView) convertView.findViewById(R.id.mark);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            Model post = dataList.get(position);
            holder.user_image.setImageResource(post.image_path);
            holder.publish_user.setText(post.publish_user);
            holder.publish_at.setText(post.publish_at);
            holder.mark.setText(post.mark);
            holder.title.setText(post.title);
            holder.body.setText(post.body);
            return convertView;
        }

    }

    public final class ViewHolder {
        public ImageView user_image;
        public TextView publish_user;
        public TextView publish_at;
        public TextView mark;
        public TextView title;
        public TextView body;
    }

主要的布局:

<com.qianlong.android.view.pullrefreshview.PullToRefreshListView 
        android:id="@+id/ptr_lv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

恩 简单~

其实不难喽,还是不懂的可以参考本例的代码,我会给出Demo的下载地址

Demo地址:http://download.youkuaiyun.com/detail/hello_chillax/8686921

写得比较简单,不懂的地方请留言~

ViewPager嵌套ListVIew实现上拉和下拉刷新 ViewPager中嵌套ListView实现了下拉刷新和上拉更多 解决了冲突问题。 立即下载

相关推荐

ViewPager+侧滑+下拉刷新

listView +ViewPager(首页轮播大图) +侧滑菜单+下拉刷新

Android中解决ListView嵌套Viewpager时,滑动事件冲突的方法

1.解决思路             当我们使用ListView嵌套ViewPager时,会出现滑动事件的冲突,我们都知道,Viewpager自己也有滑动的功能,ListView也有滑动的功能,当我们手指放在ViewPager上来达到滑动ListView的目的时,就会发现,这种冲突问题出现了,因为我们根本无法滑动ListView,为什么呢,因为ViewPager是放在ListView上面的,

yanxiaosa的博客 4801

ViewPager+ListView上拉加载下拉刷新

ViewPager+ListView上拉加载下拉刷新,,,

了解ListView和ViewPager

ListView定义:    ListView是显示垂直可滚动的列表项视图,列表项的来源可以使用一个适配Adapter,Adapter可将内容从源(如数组或数据库)转换成视图放在列表中。    ListView 控件可使用四种不同视图显示项目。通过此控件,可将项目组成带有或不带有列标头的列,并显示伴随的图标和文本。 可使用 ListView 控件将称作 ListItem 对象的列表条目组织成下列四...

STU17xkx的博客 570

通过开源项目实现ViewPager中有下拉刷新的listView

通过开源项目实现ViewPager中有下拉刷新的listView,,相关博文:http://www.cnblogs.com/tianzhijiexian/p/4024510.html

如何构建智能聊天系统

聊天分为听、思考、读,简单的通过ASR、LLM、TTS三类模型的组合可以实现,最近openai推出支持多模态的GPT-4o模型,可以把三个模型真正融合成在一起。现在市面上的模型百花齐放,各有所长。要实现可落地的方案,需要结合业务,验证模型效果,同时也要考虑方案的可行性,有些模型在国内能用,有些在国内不能用。

xsgnzb的专栏 2108

如何在ViewPager里面加入ListView

对于listview,是需要设置适配器的,listview本身也是一个动态的组件,下面将介绍如何在ViewPager中添加动态的listview。 package com.example.xuhao.viewpagerapplication; import android.support.v4.view.PagerAdapter; import android.suppor

爱吃冰淇凌的羊驼 8249

TOEIC托业词汇汇总(完整版)

1.appointment 约会,约定2.attendance 出席人数;出席3.cabinet 橱柜4.calendar 日历;月历;行事历5.clerk 办事员,书记6.directory 人名住址薄7.duplicte 复制;副本8.filing 归档9.in-tray 待处理文件盒10.monitor 检测;监视;追踪11.out-tray 已处理文件盒12.partition 分隔;分隔物(如墙壁等)13.postage 邮费。

weixin_39676449的博客 1万+

ViewPager嵌套ListView滑动冲突解决,ViewPager内容按照元素最大高度显示

ViewPager嵌套ListView滑动冲突解决,ViewPager内容按照元素最大高度显示 效果图: 矩形区域是可以横向滑动的,里面嵌套listview,若不处理,容易出现滑动冲突。 参考代码:自定义ViewPager package com.**.common.view; import android.content.Context; import android.support....

a day a better 946

OpenWRT软件源更换保姆级教程:从国内镜像到官方源一键切换(含常见报错解决)

本文提供OpenWRT软件源更换的详细教程,涵盖从国内镜像源到官方源的切换方法,并深度解析常见报错解决方案。针对国内网络环境,指导用户如何精准定位系统信息、备份配置、选择并配置清华等国内镜像源,以及处理签名验证失败、依赖缺失、404错误等典型问题,旨在提升软件包管理效率与稳定性。

weixin_29229261的博客 1939

中国裁判文书网案例批量爬取

本文介绍了某法院网站数据采集的技术研究过程,主要包含JS逆向分析和数据解密方法。通过开发者工具分析发现页面数据经过加密处理,重点研究了ciphertext等加密参数的生成逻辑。文章详细记录了定位加密函数、扣取加密代码、解密数据处理的全流程,并验证了解密方法的有效性。研究过程中强调了技术使用的法律边界,明确声明仅用于合法技术研究,禁止任何非法数据爬取行为。最终实现了加密数据的成功解密,并解释了各请求参数的作用,为后续数据清洗和存储奠定了基础。

2303_80825459的博客 816

android listview动态添加viewpager,向 ViewPager 中添加 包含 ListView 的 Fragment

对与fragment就不说什么了,直接看API手册吧,亲。向 ViewPager 中添加 包含 ListView 的 Fragment 的过程比较麻烦。他所表现的效果就是新闻客户端的滑动翻页效果。在这里就不粘代码了。只把思路理一下。代码有时间再粘:一,你需要一个 ViewPager :在实验时,我的activity中就只有一个ViewPager。没有别的东西。二,你需要一个自定义的fragment...

weixin_29660305的博客 515

JSP期末考试复习习题及答案

以下习题是对于平时课堂小测的整理,如有错误敬请指正! 欢迎一起交流~ 预祝各位小伙伴们考试顺利! Test1 一. 单选题 – 1.(单选题)当用户请求jsp页面时,JSP引擎就会执行该页面的字节码文件响应客户的请求,执行字节码文件的结果是() A. 发送一个JSP源文件到客户端 B. 发送一个Java文件到客户端 C. 发送一个HTML页面到客户端 D. 什么都不做 – 2.(单选题)下列动态网页和静态网页的根本区别描述错误的是( D) A. 静态网页服务器端返回的HTML文件是事先存储好的 B. 动.

技术小白 2万+

ViewPager+下拉刷新ListView超强组合

转载请注明出处:http://blog.youkuaiyun.com/hello_chillax/article/details/45599215,谢谢~ 想必大家都用过360手机助手,效果是不是很绚丽,其实很好实现喽。今天就来说一说怎么去实现喽~(PS:咱们是讲原理和思路,我这里是用的不是360助手的界面,懒得去扒那些图片喽,太懒,见谅~~) 首先,上图:  先看一下工程目录结构: 

qq_26323183的博客 1343

【网络安全】零基础入门网络安全劝退指北

作为从16年接触网络安全的小白,谈谈零基础如何入门网络安全,有不对的地方,请多多指教。 这些年最后悔的事情莫过于没有把自己学习的东西积累下来形成一个知识体系。 后续我也会陆续的整理网络安全的相关学习资料及文章,与大家一起探讨学习。 如何入门 简单了解网络安全 网络安全就是指的确保网络系统中的数据不被别人破坏,而网安工程师就是涉及程序来维护网络安全。 网安方向有很多职位,比如安全产品工程师,安全分析师,数据恢复工程师,网络架构工程师,安全编程工程师,以及网络集成工程师等。 工作内容主要包括: 安全评测,风

互联网老辛 4586

【嘉立创EDA】PCB 多层板如何交换内层,4层板交换板层

本文使用嘉立创EDA,描述如何在PCB设计时,如何交换各个板层,特别是4层板需要交换内层时,应该如何操作,以供有需要的读者参考。

l64481000的博客 2015

初步了解ListView及ViewPager

初步了解ListView的使用场合及实现代码 1、关于ListView的有关类   ListView是安卓UI组件中的AdapterView子类中的一个,下图即是AdapterView及其子类的关系: 这里我们就可以在边边的地方找到ListView的位置。 2、ListView的使用场合   ListView是手机系统中使用的非常广泛的一种组件,他以垂直列表的形式显示所有的列...

在下嘿嘿的博客 364

非结构化数据在大数据湖中的应用实践

想象一下,你正在整理一个杂乱的书房。有些书整整齐齐地放在书架上,每本书都有明确的标题、作者和出版日期——这些就是结构化数据,它们像数据库中的表格,有固定的格式和字段。但书房里还有更多东西:散落的照片、手写的笔记、录音带、视频光盘、甚至还有画作。这些物品没有固定的格式,每件都独一无二——这就是非结构化数据。在技术术语中,非结构化数据是指没有预定义数据模型或组织形式的信息。文本文档(Word、PDF、TXT)电子邮件和社交媒体内容图像和照片(JPG、PNG)音频文件(MP3、WAV)

软件工程实践的博客 361

NestedScrollView+ViewPager+下拉刷新+RecycleView的冲突解决

说明 日常开发中 , 经常会遇到顶部布局非常的长 , 以及超出屏幕外有ViewPager的布局,此时的Viewpager在限定宽高的条件下 , 在滑动到ViewPager时 , 如果想要对Viewpager下的RecycleView进行刷新操作 , 会使得NestedScrollView滑动 , 从而达不到列表的刷新 , 到时候UI妹妹就会追着你问为啥实现不了呢, 所以本文我们就来解决它. 注意...

浮生若梦的博客 1733

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

(原创)关于viewpager嵌套listview居中显示的问题

今天折腾了半天自定义控件的问题,如下图所示,我们UI设计了一种可以左右滑动的列表,而列表中又包含了listview。而且要居中显示listview 我一看UI,心想简单,不就是根据datas的数目进行分页么,有几页就在viewpager里add几个listview,然后设置viewpager居中显示不就行了么? 这里先设置viewpager的width为wrap_content,listvie...

weixin_34293059的博客 215

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ViewPager嵌入ListView

ViewPager中嵌入listView其实ViewPager中嵌入listView的原理跟listView中嵌入TextView的原理 差不多了。 想要让ListView的TextView起作用,需要先找到ListView,再以ListView为布局找TextView这样就可以让TextView起作用了下面大概的介绍一下ViewPager中嵌入listView的步骤1.先找到ViewPager

qazzxc111的博客 636

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Android 我关于上拉加载,下拉刷新的处理方式(可以解决viewpager)

这几天要找实习了,有时候感觉自己真的是好笨啊,明明编程了两年半,但是想想自己好像真的是什么都不会,简历不知道写什么,真的是好心塞啊。最近总是想起周星驰的一句话 ”努力,奋斗“ (出自喜剧之王)本来这一是一个完整的几乎可以解决所有的关系到列表加载的框架,我今天早上勉强完成,测试完了之后,下午已经没有心情投入继续完善注释的事情中了,所以这会先上传上来,(说实话,其实也是为了找实习,因为我现在要重新写我...

seaofpgy 1301

Android基础:ListView + ViewPager ( 一 )

实际开发中,我们常看到app界面是viewpager + ListView,下面分析。情况: 1 线性布局中使用viewpager + ListView 2 代码中创建ViewPager,并把viewpager作为listview的头布使用 3 自定义类MyViewPager,并把MyViewPager作为listview的头布使用(或者在布局中引用) 4 引用框架PullTo

Java技术博客,不再更新Android内容 826

代码创建listview android,Aandroid在ViewPager中添加ListView

最近的项目中碰到一个需要横竖都能滑动的页面效果,如同手机qq的好友菜单界面(如下图),可以通过选项卡来选择需要的界面,也可以通过屏幕手指的滑动来实现,而每一个分页面的内容对应的是一个可以上下滑动的ListView,所以最后结合起来的效果是,在页面中可以上下滑动,在各个分页之间可以左右滑动。对于这个效果有两种方案,一种是通过TabActivitiy来实现,将选项卡设置为TabActibitiy的标志...

weixin_42144604的博客 513

tablayout+viewpager刷新,tablayout动态刷新

tablayout时接口返回,tablayout个数不固定,可以在后台添加或者删除,tablayout刷新;viewpager中的fragment数据有最近观看,每次回到当前页都要刷新; 1.首先导入tablayout implementation 'com.flyco.tablayout:FlycoTabLayout_Lib:2.1.2@aar' 2.布局 <LinearLayout android:id="@+id/ll_tab"

qq_35821446的博客 2089
上一篇: 开源框架xUtils的使用
下一篇: Android四大组件之~~ContentProvider
肖小的人儿
博客等级 码龄12年 29粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值