避免listView滚动刷新getview

来源:互联网 发布:卢宇彤 知乎 编辑:程序博客网 时间:2024/06/13 10:48

缓存ListView行中的 View

listView 在每次仅绘制可视范围内的item,这样当你滚动listview的实际上他是动态加载的。
避免listView滚动刷新getView,所以就需要缓存ListView 中item中的view。

具体实现如下:

 

 

定义ViewCache

 

 

Java代码  收藏代码
  1. import android.view.View;  
  2.   
  3. public class ViewCache {  
  4.     private View baseView;  
  5.   
  6.     public ViewCache() {  
  7.     }  
  8.   
  9.     public ViewCache(View baseView) {  
  10.         this.baseView = baseView;  
  11.     }  
  12.   
  13.     public View getBaseView() {  
  14.         return baseView;  
  15.     }  
  16.   
  17.     public void setBaseView(View baseView) {  
  18.         this.baseView = baseView;  
  19.     }  
  20.   
  21. }  

定义ListAdapter

Java代码  收藏代码
  1. import java.util.List;  
  2.   
  3. import org.json.JSONArray;  
  4. import org.json.JSONException;  
  5.   
  6. import com.Practice.ui.R;  
  7. import com.Practice.util.ViewCache;  
  8.   
  9. import android.content.Context;  
  10. import android.util.Log;  
  11. import android.view.LayoutInflater;  
  12. import android.view.View;  
  13. import android.view.ViewGroup;  
  14. import android.widget.BaseAdapter;  
  15. import android.widget.ListView;  
  16. import android.widget.TextView;  
  17.   
  18. public class ListAdapter extends BaseAdapter {  
  19.     private ListView listView;  
  20.     private LayoutInflater mInflater;  
  21.     private List list;  
  22.     public static final String TAG = "ListAdapter";  
  23.   
  24.     public ListAdapter(Context paramContext, ListView paramListView,  
  25.             List paramList) {  
  26.         listView = paramListView;  
  27.         list = paramList;  
  28.         mInflater = (LayoutInflater) paramContext  
  29.                 .getSystemService("layout_inflater");  
  30.     }  
  31.   
  32.     @Override  
  33.     public int getCount() {  
  34.         return list.size();  
  35.     }  
  36.   
  37.     @Override  
  38.     public Object getItem(int position) {  
  39.         return list.get(position);  
  40.     }  
  41.   
  42.     @Override  
  43.     public long getItemId(int position) {  
  44.         return list.get(position).getId();  
  45.     }  
  46.   
  47. @Override  
  48.     public View getView(int position, View view, ViewGroup parent) {  
  49.         ViewCache viewCache = new ViewCache();  
  50.         JSONArray positionArray;  
  51.         if (view != null) {  
  52.             // 使用缓存获取view  
  53.             viewCache = (ViewCache) view.getTag();  
  54.             view = viewCache.getBaseView();  
  55.             Log.i(TAG, "使用viewCache");  
  56.         } else {  
  57.             view = mInflater.inflate(R.layout.item, null);  
  58.             //设置缓存  
  59.             viewCache.setBaseView(view);  
  60.             //设置view 的tag为viewCache  
  61.             view.setTag(viewCache);  
  62.             Log.i(TAG, "创建view");  
  63.         }  
  64.   
  65.         return view;  
  66.     }  
  67. }  
 












listView 在每次仅绘制可视范围内的item,这样当你滚动listview的实际上他是动态加载的。
避免listView滚动刷新getView
private List<View> viewCache = new ArrayList<View>();
@Override
public View getView(int position, View convertView, ViewGroup parent) {

View view = null;
// 文章列表页面的每个Item
if (viewCache.size() > position) {
view = viewCache.get(position);
if (view != null)
return view;
}
view = 构建的view
return view;
}






原创粉丝点击