ListView行のViewをキャッシュ



 
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;
	}
}