>>分享Android开发相关的技术 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 19213 个阅读者 刷新本主题
 * 贴子主题:  Android ListView滑动加载 回复文章 点赞(0)  收藏  
作者:sunshine    发表时间:2020-05-15 01:24:17     消息  查看  搜索  好友  邮件  复制  引用

项目结构如图所示:

点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

项目主要包括一个activity和三个xml页面布局,代码如下:

MainActivity.java
  1.    package  com.android.ray.activity;  
  2.   import  android.app.ListActivity;  
  3.   import  android.os.Bundle;  
  4.   import  android.os.Handler;  
  5.   import  android.view.LayoutInflater;  
  6.   import  android.view.View;  
  7.   import  android.view.ViewGroup;  
  8.   import  android.widget.AbsListView;  
  9.   import  android.widget.BaseAdapter;  
  10.   import  android.widget.Button;  
  11.   import  android.widget.LinearLayout;  
  12.   import  android.widget.ListView;  
  13.   import  android.widget.TextView;  
  14.   import  android.widget.AbsListView.OnScrollListener;  
  15.   public   class  MainActivity  extends ListActivity  implements  OnScrollListener {  
  16.        private  ListView listView;  
  17.        //全局变量,用来记录ScrollView的滚动状态,1表示开始滚动,2表示正在滚动,0表示停止滚动  
  18.        private   int  scrollState;  
  19.        //可加载记录的条数  
  20.        private   int  count =  100 ;  
  21.        private   int  lastItem;  
  22.        //当前可见页面中的Item总数  
  23.        private   int  visibleItemCount;  
  24.        private  Button footerButton;  
  25.        private  LinearLayout footerProgressBarLayout;  
  26.        private  View view;  
  27.        private  ListAdapter mAdapter =  new  ListAdapter();  
  28.        public   void  onCreate(Bundle savedInstanceState) {  
  29.            super .onCreate(savedInstanceState);  
  30.            //加载主页面布局  
  31.           setContentView(R.layout.main);  
  32.           LayoutInflater inflater = LayoutInflater.from( this );  
  33.            //加载底部布局  
  34.           view = inflater.inflate(R.layout.main_more,  null );  
  35.           footerButton = (Button) view.findViewById(R.id.button);  
  36.           footerProgressBarLayout = (LinearLayout) view.findViewById(R.id.linearlayout);  
  37.           footerProgressBarLayout.setVisibility(View.GONE);  
  38.            //更多按钮点击事件  
  39.           footerButton.setOnClickListener( new  View.OnClickListener() {  
  40.                public   void  onClick(View v) {  
  41.                    if (lastItem == mAdapter.count && scrollState == OnScrollListener.SCROLL_STATE_IDLE){  
  42.                        //设置页面底部布局控件可见性  
  43.                       footerButton.setVisibility(View.GONE);  
  44.                       footerProgressBarLayout.setVisibility(View.VISIBLE);  
  45.                        if (mAdapter.count <= count){  
  46.                            //使用Handler动态加载数据  
  47.                            new  Handler().postDelayed( new  Runnable() {  
  48.                                public   void  run() {  
  49.                                   mAdapter.count +=  10 ;  
  50.                                   mAdapter.notifyDataSetChanged();  
  51.                                   listView.setSelection(lastItem - visibleItemCount +  1 );  
  52.                                    //获取数据成功设置Layout不可见,Button设为可见  
  53.                                   footerButton.setVisibility(View.VISIBLE);  
  54.                                   footerProgressBarLayout.setVisibility(View.GONE);  
  55.                               }  
  56.                           } ,  2000 );  
  57.                       }  
  58.                   }  
  59.               }  
  60.           });  
  61.           listView = getListView();  
  62.            //将布局添加到ListView的Footer中  
  63.           listView.addFooterView(view);  
  64.           listView.setAdapter(mAdapter);  
  65.            //设置滑动监听  
  66.           listView.setOnScrollListener( this );  
  67.       }  
  68.        public   void  onScroll(AbsListView view,  int  firstVisibleItem,  
  69.                int  visibleItemCount,  int  totalItemCount) {  
  70.            this .visibleItemCount = visibleItemCount;  
  71.           lastItem = firstVisibleItem + visibleItemCount -  1 ;  
  72.            if (mAdapter.count >= count){  
  73.               listView.removeFooterView(view);  
  74.           }  
  75.   //        boolean loadMore = firstVisibleItem + visibleItemCount >= totalItemCount;  
  76.   //        if(loadMore){  
  77.   //          mAdapter.count += visibleItemCount;  
  78.   //          mAdapter.notifyDataSetChanged();  
  79.   //        }  
  80.       }  
  81.        public   void  onScrollStateChanged(AbsListView view,  int  scrollState) {  
  82.            this .scrollState = scrollState;  
  83.       }  
  84.        /**  
  85.         * 数据匹配器  
  86.         * @author qin_lei  
  87.         *  
  88.         */  
  89.        public   class  ListAdapter  extends  BaseAdapter{  
  90.            int  count =  10 ;  
  91.            public   int  getCount() {  
  92.                return  count;  
  93.           }  
  94.            public  Object getItem( int  position) {  
  95.                return  position;  
  96.           }  
  97.            public   long  getItemId( int  position) {  
  98.                return  position;  
  99.           }  
  100.            public  View getView( int  position, View convertView, ViewGroup parent) {  
  101.               LayoutInflater inflater = LayoutInflater.from(MainActivity. this );  
  102.               View view = inflater.inflate(R.layout.main_item,  null );  
  103.               TextView tv = (TextView) view.findViewById(R.id.tv);  
  104.               tv.setText( "Hello "  + position);  
  105.                return  view;  
  106.           }  
  107.       }  
  108.   }

     主要布局文件代码如下:

         main.xml

  1.    <? xml   version = "1.0"   encoding = "utf-8" ?>  
  2.   < LinearLayout   xmlns:android = "http://schemas.android.com/apk/res/android"      
  3.        android:orientation = "vertical"      
  4.        android:layout_width = "fill_parent"      
  5.        android:layout_height = "fill_parent" >      
  6.        < ListView            
  7.            android:id = "@android:id/list"          
  8.            android:layout_width = "fill_parent"            
  9.            android:layout_height = "wrap_content" />  
  10.   </ LinearLayout >  

     main_more.xml

  1.    <? xml   version = "1.0"   encoding = "utf-8" ?>  
  2.   < LinearLayout   xmlns:android = "http://schemas.android.com/apk/res/android"      
  3.        android:orientation = "vertical"      
  4.        android:layout_width = "fill_parent"      
  5.        android:layout_height = "fill_parent" >      
  6.        < Button          
  7.            android:id = "@+id/button"          
  8.            android:layout_width = "fill_parent"            
  9.            android:layout_height = "wrap_content"            
  10.            android:text = "更多" />      
  11.        < LinearLayout          
  12.            android:orientation = "horizontal"          
  13.            android:layout_width = "fill_parent"          
  14.            android:layout_height = "wrap_content"          
  15.            android:gravity = "center"          
  16.            android:id = "@+id/linearlayout" >          
  17.            < ProgressBar              
  18.                android:layout_width = "wrap_content"              
  19.                android:layout_height = "wrap_content" />          
  20.            < TextView              
  21.                android:layout_width = "wrap_content"              
  22.                android:layout_height = "wrap_content"              
  23.                android:text = "正在获取..." />          
  24.        </ LinearLayout >  
  25.   </ LinearLayout >  

     ListView单个显示item布局main_item.xml

  1.    <? xml   version = "1.0"   encoding = "utf-8" ?>  
  2.   < LinearLayout   xmlns:android = "http://schemas.android.com/apk/res/android"      
  3.        android:orientation = "horizontal"      
  4.        android:layout_width = "fill_parent"      
  5.        android:layout_height = "fill_parent" >      
  6.        < ImageView          
  7.            android:layout_width = "wrap_content"          
  8.            android:layout_height = "wrap_content"          
  9.            android:scaleType = "fitXY"          
  10.            android:src = "@drawable/icon_head" />      
  11.        < TextView          
  12.            android:id = "@+id/tv"          
  13.            android:layout_width = "fill_parent"            
  14.            android:layout_height = "20dp"            
  15.            android:text = "@string/hello" />  
  16.   </ LinearLayout >  

     项目运行结果如下图:

点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

      点击更多,十条,依次类推:

点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小
                  

----------------------------
原文链接:https://blog.51cto.com/2736766/640330

程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-06-06 15:39:00 重新编辑]
  Java面向对象编程-->Java语言的基本语法和规范
  JavaWeb开发-->开发JavaMail Web应用
  JSP与Hibernate开发-->Java对象持久化技术概述
  Java网络编程-->Java网络编程入门
  精通Spring-->Vue组件开发高级技术
  Vue3开发-->Vue指令
  Android的Service和广播的讲解
  Android 事件处理
  Android开发实践:用脚本编译Android工程
  回眸Android发展历史
  Android UI学习 - Tab的学习和使用
  Android--Widget开发
  Android中的Intent Filter与安全
  Android资源命名规范
  安卓隐藏标题栏方法
  Android学习建议
  UI渲染机制以及优化
  Android 加载大图/多图,有效避免OOM
  Android 碎片(Fragment)
  Android adb你真的会用吗?
  Android中NDK的含义和作用
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。