分享个刚写好的 android 的 ListView 动态加载类,功能全而代码少。

简介: (转载声明出处:http://www.cnblogs.com/linguanh/) 简介:      该ListView 实现动态加载数据,为了方便用户充分地自定义自己的数据源、点击事件,等核心操作,本类采用接口形式提供上述具体操作!      1,所有关键的操作使用接口,由用户自己定义,              包括:数据适配器的配置、动态加载函数的配置、item点击接口;      2,已经新建线程来执行动态函数。

(转载声明出处:http://www.cnblogs.com/linguanh/)

简介:
      该ListView 实现动态加载数据,为了方便用户充分地自定义自己的数据源、点击事件,等核心操作,本类采用接口形式提供上述具体操作!
      1,所有关键的操作使用接口,由用户自己定义,
              包括:数据适配器的配置、动态加载函数的配置、item点击接口;
      2,已经新建线程来执行动态函数。
      //3,提供一个默认的动态执行函数;

用法:

      你只需要在自己的 activity、fragment或者其他,之后调用其构造函数new 一个该类对象,同时传入你的 ListView,然后再继承它的两个接口:

      configAdapterForListView、configRefreshData;

通过 两行代码绑定接口:

      setConfigListviewAdapterListener(this)

      setConfigRefreshDataListener(this)

共重写 4 个函数,分别是:

 1     @Override
 2     public SimpleAdapter configSimpleAdapter() {
 3        //在这里配置 SimpleAdapter,再返回,默认返回null
 4         return null;
 5     }
 6 
 7     @Override
 8     public ArrayAdapter configArrayAdapter() {
 9        //在这里配置 ArrayAdapter
10         return null;
11     }
12 
13     @Override
14     public void configOnItemClick(AdapterView<?> parent, View view, int position, long id) {
15         // 在这里处理 listView的 点击事件
16     }
17 
18 
19     @Override
20     public void refreshData() {
21         //在这里处理 加载操作,无需再新建线程执行
22     }

 

 

最后通过调用 setListviewAdapter();完成所有操作,这个函数执行后,它会自动调用,上述两个数据适配器接口,和你传进去的ListView 进行 绑定。

 

其他数据适配器,可以自行添加,或者重写我的类进行修改,相信你绝对看得懂!

 

代码:

  1 package com.lgh.addItemListview;
  2 
  3 import android.content.Context;
  4 import android.os.Handler;
  5 import android.os.Message;
  6 import android.view.View;
  7 import android.widget.AbsListView;
  8 import android.widget.AdapterView;
  9 import android.widget.ArrayAdapter;
 10 import android.widget.ListView;
 11 import android.widget.SimpleAdapter;
 12 
 13 import java.util.ArrayList;
 14 import java.util.HashMap;
 15 import java.util.List;
 16 import java.util.Map;
 17 
 18 /**
 19  * Created by LinGuanHong on 2015/7/14.
 20  * 简介:
 21  *     该ListView 实现动态加载数据
 22  *     1,所有关键的操作使用接口,由用户自己定义,
 23  *           包括:数据适配器的配置、动态加载函数的配置、item点击接口;
 24  *     2,已经新建线程来执行动态函数。
 25  *     //3,提供一个默认的动态执行函数;
 26  */
 27 public class mainListview implements AbsListView.OnScrollListener,AdapterView.OnItemClickListener {
 28 
 29     private Boolean isSimpleDapter = false;//默认是 ArrayAdapter
 30     private Boolean refreshAble = false;//防止一直刷新
 31     private List<Map<String,Object>> defaultDataList;
 32     private configAdapterForListView adapter;
 33     private configRefreshData refresh;
 34     private ListView listview;
 35     private Handler dealHandler;
 36     private int defaultDataSize;
 37     private Context context;
 38 
 39     public  mainListview(Context context,ListView listview){
 40         this.context = context;
 41         if(listview!=null){
 42             this.listview = listview;
43 initAll();
43 }
}
46 47 public void setConfigListviewAdapterListener(configAdapterForListView adapter){ 48 this.adapter = adapter; 49 } 50 51 private configAdapterForListView getListviewAdapterListener(){ 52 return adapter; 53 } 54 55 public void setConfigRefreshDataListener(configRefreshData refresh){ 56 this.refresh = refresh; 57 } 58 59 private configRefreshData getConfigRefreshDataListener(){ 60 return refresh; 61 } 62 63 void initAll(){ 64 initHandler(); 65 listview.setOnScrollListener(this); 66 listview.setOnItemClickListener(this); 67 } 68 69 public void setListviewAdapter(){ 70 if(listview!=null){ 71 if((getListviewAdapterListener().configArrayAdapter())!=null){ 72 listview.setAdapter(getListviewAdapterListener().configArrayAdapter()); 73 }else if((getListviewAdapterListener().configSimpleAdapter())!=null){ 74 isSimpleDapter=true; 75 listview.setAdapter(getListviewAdapterListener().configSimpleAdapter()); 76 } 77 }else{ 78 79 } 80 } 81 82 void initHandler(){ 83 dealHandler = new Handler(){ 84 @Override 85 public void handleMessage(Message msg) { 86 super.handleMessage(msg); 87 if(msg.what==1){ 88 if(isSimpleDapter){ //判断用户选择的是何种适配器 89 getListviewAdapterListener().configArrayAdapter().notifyDataSetChanged(); 90 //refreshAble = true; 91 }else{ 92 getListviewAdapterListener().configArrayAdapter().notifyDataSetChanged(); 93 //refreshAble = true; 94 } 95 } 96 } 97 }; 98 } 99 100 //为了优化内存,由用户自己选择是否启用默认数据 101 public void setDefaultDataList(int defaultDataSize){ 102 this.defaultDataSize = defaultDataSize; 103 defaultDataList = new ArrayList<Map<String, Object>>(); 104 } 105 106 public List<Map<String,Object>> defaultRefreshDataFunction(){ 107 for(int i=0;i<defaultDataSize;i++){ 108 Map<String,Object> map = new HashMap<String, Object>(); 109 //默认的操作 110 } 111 return defaultDataList; 112 } 113 114 @Override 115 public void onScrollStateChanged(AbsListView view, int scrollState) { 116 117 } 118 119 120 @Override 121 public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 122 //firstVisibleItem:当前能看见的第一个列表项ID(从0开始) 123 //visibleItemCount:当前能看见的列表项个数(小半个也算) 124 //totalItemCount:列表项共数 125 if(firstVisibleItem+visibleItemCount==totalItemCount && totalItemCount>0){ 126 new Thread(new Runnable() { 127 @Override 128 public void run() { 129 getConfigRefreshDataListener().refreshData();//执行更新接口 130 Message msg = new Message(); 131 msg.what = 1; 132 dealHandler.sendMessage(msg); 133 } 134 }).start(); 135 } 136 } 137 138 @Override 139 public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 140 getListviewAdapterListener().configOnItemClick(parent,view,position,id);//调用 item接口点击 141 } 142 143 public interface configAdapterForListView{ 144 //配置 SimpleAdapter数据适配器接口 145 public SimpleAdapter configSimpleAdapter(); 146 // 配置 ArrayAdapter 数据适配器接口 147 public ArrayAdapter configArrayAdapter(); 148 // item 点击事件接口 149 public void configOnItemClick(AdapterView<?> parent, View view, int position, long id); 150 } 151 152 public interface configRefreshData{ 153 //实现这个接口来设置用户下滑时,动态加载数据 接口 154 public void refreshData(); 155 } 156 }

测试例子 activity

 1 import android.app.Activity;
 2 import android.os.Bundle;
 3 import android.view.Menu;
 4 import android.view.MenuItem;
 5 import android.view.View;
 6 import android.widget.AdapterView;
 7 import android.widget.ArrayAdapter;
 8 import android.widget.ListView;
 9 import android.widget.SimpleAdapter;
10 
11 import com.lgh.addItemListview.mainListview;
12 
13 import java.util.ArrayList;
14 import java.util.List;
15 
16 public class MainActivity extends Activity implements
17         mainListview.configAdapterForListView,mainListview.configRefreshData {
18 
19     ArrayAdapter<String> adapter;
21 List<String> res = new ArrayList<String>() ; 22 private ListView myListview; 23 @Override 24 protected void onCreate(Bundle savedInstanceState) { 25 super.onCreate(savedInstanceState); 26 setContentView(R.layout.testlv); 27 for(int j = 0;j<20;j++){ 28 res.add("beijing"); 29 } 30 myListview = (ListView) findViewById(R.id.lv); 31 mainListview test = new mainListview(this,myListview); 32 test.setConfigListviewAdapterListener(this); 33 test.setConfigRefreshDataListener(this); 34 adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,res); 35 test.setListviewAdapter(); 36 } 37 38 39 @Override 40 public boolean onCreateOptionsMenu(Menu menu) { 42 getMenuInflater().inflate(R.menu.main, menu); 43 return true; 44 } 45 46 @Override 47 public boolean onOptionsItemSelected(MenuItem item) { 51 int id = item.getItemId(); 52 if (id == R.id.action_settings) { 53 return true; 54 } 55 return super.onOptionsItemSelected(item); 56 } 57 58 @Override 59 public SimpleAdapter configSimpleAdapter() { 60 61 return null; 62 } 63 64 @Override 65 public ArrayAdapter configArrayAdapter() { 66 return adapter; 67 } 68 69 @Override 70 public void configOnItemClick(AdapterView<?> parent, View view, int position, long id) { 71 // 在这里处理 listView的 点击事件 72 } 73 74 75 @Override 76 public void refreshData() { 77 addString(); 78 } 79 80 void addString(){ 81 res.add("i am the new"); 82 } 83 public List<String> getData(){ 84 return res; 85 } 86 }

 

如果您认为这篇文章还不错或者有所收获,您可以通过扫描一下下面的支付宝二维码 打赏我一杯咖啡【物质支持】,也可以点击右下角的【推荐】按钮【精神支持】,因为这两种支持都是我继续写作,分享的最大动力


img_12e3f54d4d0f70f0eb14f20548e3d781.png
目录
相关文章
|
11月前
|
数据库 Android开发
Android使用EditText+Listview实现搜索效果(使用room模糊查询)
本文介绍如何在Android中使用EditText与ListView实现搜索功能,并结合Room数据库完成模糊查询。主要内容包括:Room的模糊查询语句(使用`||`代替`+`号)、布局美化(如去除ListView分割线和EditText下划线)、EditText回车事件监听,以及查询逻辑代码示例。此外,还提供了相关扩展文章链接,帮助读者深入了解ListView优化、动态搜索及Room基础操作。
683 65
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
425 1
|
JSON 调度 数据库
Android面试之5个Kotlin深度面试题:协程、密封类和高阶函数
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点。文章详细解析了Kotlin中的协程、扩展函数、高阶函数、密封类及`inline`和`reified`关键字在Android开发中的应用,帮助读者更好地理解和使用这些特性。
531 1
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异:从代码到用户体验
【10月更文挑战第5天】在移动应用开发的广阔天地中,安卓和iOS两大平台各占半壁江山。它们在技术架构、开发环境及用户体验上有着根本的不同。本文通过比较这两种平台的开发过程,揭示背后的设计理念和技术选择如何影响最终产品。我们将深入探讨各自平台的代码示例,理解开发者面临的挑战,以及这些差异如何塑造用户的日常体验。
|
前端开发 Java 测试技术
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
405 2
|
存储 Java Android开发
🔥Android开发大神揭秘:从菜鸟到高手,你的代码为何总是慢人一步?💻
在Android开发中,每位开发者都渴望应用响应迅速、体验流畅。然而,代码执行缓慢却是常见问题。本文将跟随一位大神的脚步,剖析三大典型案例:主线程阻塞导致卡顿、内存泄漏引发性能下降及不合理布局引起的渲染问题,并提供优化方案。通过学习这些技巧,你将能够显著提升应用性能,从新手蜕变为高手。
286 2
|
前端开发 Java 测试技术
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
566 0
|
JSON JavaScript 前端开发
Android调用Vue中的JavaScript代码
Android调用Vue中的JavaScript代码
444 3
|
Java 测试技术 Android开发
Android项目架构设计问题之使用反射调用类的私有方法如何解决
Android项目架构设计问题之使用反射调用类的私有方法如何解决
306 0
|
Java Android开发
Android项目架构设计问题之要提升代码的可读性和管理性如何解决
Android项目架构设计问题之要提升代码的可读性和管理性如何解决
179 0

热门文章

最新文章

下一篇
开通oss服务