转载

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

(转载声明出处: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 //使用 scrollView 包住 ListView 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 }
正文到此结束
Loading...