android的ListView的分页加载

简介:

main6.xml

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


main6_item.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version= "1.0"  encoding= "utf-8" ?>
<LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android"
     android:layout_width= "match_parent"
     android:layout_height= "wrap_content"
     android:orientation= "vertical"
         >
     
     <TextView
         android:id= "@+id/textView_title_1_1" 
         android:layout_width= "match_parent"
         android:layout_height= "wrap_content"
         android:textSize= "28sp"
         android:text= "title"
         android:textColor= "#55ff88"
         
         />
       <TextView
         android:id= "@+id/textView_content_2_2" 
         android:layout_width= "match_parent"
         android:layout_height= "wrap_content"
         android:textSize= "20sp"
         android:text= "duanluosdfsdf"
         />
       
     
 
</LinearLayout>


MainActivity6

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
package  com.example.listview;
 
import  java.util.ArrayList;
import  java.util.List;
 
 
 
 
import  java.util.Vector;
 
import  android.app.Activity;
import  android.os.Bundle;
import  android.os.Handler;
import  android.os.Message;
import  android.view.View;
import  android.view.ViewGroup;
import  android.widget.AbsListView;
import  android.widget.AbsListView.OnScrollListener;
import  android.widget.BaseAdapter;
import  android.widget.ListView;
import  android.widget.TextView;
 
public  class  MainActivity6  extends  Activity  implements  OnScrollListener{
     private  ListView listView;
     private  List<News> news= new  Vector<News>();
     private  MyAdapter myDapter;
     //线程之间通信的桥梁
     private  Handler handler= new  Handler(){
         @Override
         public  void  handleMessage(Message msg) {
             // TODO Auto-generated method stub
             switch  (msg.what) {
             case  1 :
                 //通知适配器,更新数据
                 myDapter.notifyDataSetChanged();
                 break ;
 
             default :
                 break ;
             }
         }
     };
     @Override
     protected  void  onCreate(Bundle savedInstanceState) {
         // TODO Auto-generated method stub
         super .onCreate(savedInstanceState);
         setContentView(R.layout.main6);
         listView=(ListView) findViewById(R.id.listView6_1_1);
         //设置底部视图
         View footView=getLayoutInflater().inflate(R.layout.load,  null );
         listView.addFooterView(footView);
         listView.setOnScrollListener( this );
         //initDate();
         new  LoadDateThread().start();     //加载数据的线程
         myDapter= new  MyAdapter();
         listView.setAdapter(myDapter);
     }
     
     /**
      * 初始化数据    
      * */
     int  index;      //计数器
     void  initDate(){
         for ( int  i= 0 ;i< 10 ;i++){
             News newss= new  News();
             newss.title= "title-" +index;
             newss.content= "content-" +index;
             index++;
             news.add(newss);
         }
     }
     /**
      * 自定义适配器
      * */
      class  MyAdapter  extends  BaseAdapter{
 
         @Override
         public  int  getCount() {
             // TODO Auto-generated method stub
             return  news.size();
         }
 
         @Override
         public  Object getItem( int  position) {
             // TODO Auto-generated method stub
             return  news.get(position);
         }
 
         @Override
         public  long  getItemId( int  position) {
             // TODO Auto-generated method stub
             return  position;
         }
 
         @Override
         public  View getView( int  position, View convertView, ViewGroup parent) {
             // TODO Auto-generated method stub
             Viewholer viewholer;
             if (convertView== null ){
                 convertView=getLayoutInflater().inflate(R.layout.main6_item,  null );
                 viewholer= new  Viewholer();
                 viewholer.textView=(TextView) convertView.findViewById(R.id.textView_title_1_1);
                 viewholer.textContent=(TextView) convertView.findViewById(R.id.textView_content_2_2);
                 convertView.setTag(viewholer);
             } else {
                 viewholer=(Viewholer) convertView.getTag();
             }
             //从veclor中取出数据并填充
             News newss=news.get(position);
             viewholer.textView.setText(newss.title);
             viewholer.textContent.setText(newss.content);
             return  convertView;
         }
         
    
      
      
      static  class  Viewholer{
          TextView textView;
          TextView textContent;
      }
 
     // int scrollState=0;
      int  visiableLastIndex= 0 ;
      //滚动条状态发生变化事件方法
     @Override
     public  void  onScrollStateChanged(AbsListView view,  int  scrollState) {
         // TODO Auto-generated method stub
     /*  this.scrollState=scrollState;
         System.out.println("scrollState:"+scrollState);*/
         //滚动条在最下面并且滚动条是停止状态
         if (myDapter.getCount()==visiableLastIndex&&scrollState==OnScrollListener.SCROLL_STATE_IDLE){
             //启动线程加载数据
             new  LoadDateThread().start();
         }
         
         
     }
 
     //滚动事件方法
     @Override
     public  void  onScroll(AbsListView view,  int  firstVisibleItem,
             int  visibleItemCount,  int  totalItemCount) {
         // TODO Auto-generated method stub
         System.out.println( "view:" +view);
         System.out.println( "firstVisibleItem:" +firstVisibleItem);
         System.out.println( "visibleItemCount:" +visibleItemCount);
         System.out.println( "totalItemCount" +totalItemCount);
         visiableLastIndex=firstVisibleItem+visibleItemCount- 1 ;
     }
     
     //模拟加载数据
     //子线程不允许访问主线程的UI组件(保证主线程UI组件安全)
     class  LoadDateThread  extends  Thread{
         @Override
         public  void  run() {
             // TODO Auto-generated method stub
             super .run();
             initDate();
             try  {
                 Thread.sleep( 2000 );
                 //通知主线程,数据已加载完毕
                 handler.sendEmptyMessage( 1 );
             catch  (InterruptedException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
             }
         }
     }
}



News

1
2
3
4
5
6
7
8
package  com.example.listview;
/**
  * 新闻对象
  * */
public  class  News {
     String title;
     String content;
}

wKiom1hQ1dnz-7siAAHLpv3mtLc949.png-wh_50



 本文转自 matengbing 51CTO博客,原文链接:http://blog.51cto.com/matengbing/1882577

相关文章
|
9月前
|
API Android开发 开发者
Android UI设计: 什么是RecyclerView?为什么它比ListView更好?
Android UI设计: 什么是RecyclerView?为什么它比ListView更好?
118 2
|
7月前
|
Java Android开发
Android面试题经典之Glide取消加载以及线程池优化
Glide通过生命周期管理在`onStop`时暂停请求,`onDestroy`时取消请求,减少资源浪费。在`EngineJob`和`DecodeJob`中使用`cancel`方法标记任务并中断数据获取。当网络请求被取消时,`HttpUrlFetcher`的`cancel`方法设置标志,之后的数据获取会返回`null`,中断加载流程。Glide还使用定制的线程池,如AnimationExecutor、diskCacheExecutor、sourceExecutor和newUnlimitedSourceExecutor,其中某些禁止网络访问,并根据CPU核心数动态调整线程数。
194 2
|
4月前
|
Android开发 UED
Android 中加载 Gif 动画
【10月更文挑战第20天】加载 Gif 动画是 Android 开发中的一项重要技能。通过使用第三方库或自定义实现,可以方便地在应用中展示生动的 Gif 动画。在实际应用中,需要根据具体情况进行合理选择和优化,以确保用户体验和性能的平衡。可以通过不断的实践和探索,进一步掌握在 Android 中加载 Gif 动画的技巧和方法,为开发高质量的 Android 应用提供支持。
|
6月前
|
存储 缓存 Java
Android项目架构设计问题之优化业务接口数据的加载效率如何解决
Android项目架构设计问题之优化业务接口数据的加载效率如何解决
73 0
|
6月前
|
Java Android开发 Kotlin
Android项目架构设计问题之要在Glide库中加载网络图片到ImageView如何解决
Android项目架构设计问题之要在Glide库中加载网络图片到ImageView如何解决
58 0
|
8月前
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
98 2
|
8月前
|
XML API 开发工具
Android Bitmap 加载与像素操作
Android Bitmap 加载与像素操作
69 2
|
8月前
|
前端开发 API Android开发
25. 【Android教程】列表控件 ListView
25. 【Android教程】列表控件 ListView
286 2
|
9月前
|
XML Java Android开发
如何美化android程序:自定义ListView背景
如何美化android程序:自定义ListView背景
85 2
|
9月前
|
Android开发
Android中Glide加载Https图片失败的解决方案
Android中Glide加载Https图片失败的解决方案
555 1

热门文章

最新文章

  • 1
    如何修复 Android 和 Windows 不支持视频编解码器的问题?
  • 2
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 3
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
  • 4
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 5
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
  • 6
    【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 7
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
  • 8
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 9
    android之ListView和SimpleAdapter的组合使用
  • 10
    安卓逆向系列教程 4.1 字符串资源
  • 1
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
    50
  • 2
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    29
  • 3
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    69
  • 4
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    91
  • 5
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
    29
  • 6
    如何修复 Android 和 Windows 不支持视频编解码器的问题?
    242
  • 7
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
    62
  • 8
    【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
    35
  • 9
    【03】优雅草央千澈详解关于APP签名以及分发-上架完整流程-第三篇安卓APP上架华为商店后面的步骤-华为应用商店相对比较麻烦一些-华为商店安卓上架
    52
  • 10
    app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
    83