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