listView 在每次仅绘制可视范围内的item,这样当你滚动listview的实际上他是动态加载的。
避免listView滚动刷新getView,所以就需要缓存ListView 中item中的view。
具体实现如下:
定义ViewCache
import android.view.View;
public class ViewCache {
private View baseView;
public ViewCache() {
}
public ViewCache(View baseView) {
this.baseView = baseView;
}
public View getBaseView() {
return baseView;
}
public void setBaseView(View baseView) {
this.baseView = baseView;
}
}
定义ListAdapter
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import com.Practice.ui.R;
import com.Practice.util.ViewCache;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class ListAdapter extends BaseAdapter {
private ListView listView;
private LayoutInflater mInflater;
private List list;
public static final String TAG = "ListAdapter";
public ListAdapter(Context paramContext, ListView paramListView,
List paramList) {
listView = paramListView;
list = paramList;
mInflater = (LayoutInflater) paramContext
.getSystemService("layout_inflater");
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return list.get(position).getId();
}
@Override
public View getView(int position, View view, ViewGroup parent) {
ViewCache viewCache = new ViewCache();
JSONArray positionArray;
if (view != null) {
// 使用缓存获取view
viewCache = (ViewCache) view.getTag();
view = viewCache.getBaseView();
Log.i(TAG, "使用viewCache");
} else {
view = mInflater.inflate(R.layout.item, null);
//设置缓存
viewCache.setBaseView(view);
//设置view 的tag为viewCache
view.setTag(viewCache);
Log.i(TAG, "创建view");
}
return view;
}
}