次のリンクを参照してViewHolder パターンをリファクタリングListView
します: http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/ArrayAdapter
私の ListView アイテムには、各アイテムにビューを動的に追加する非同期 http-json 操作があります。しかし、いくつかの子ビューが他のアイテムに重複してアタッチされているという問題があります。再利用されたビューが原因である可能性があります。しかし、私はほとんどそれを扱いません。
次のソース コード (上記のリンクから貼り付けられた Async 読み込みセクション) はほとんど理解できませんif (mHolder.position == mPosition)
。true
はアダプタ クラスの内側に配置されていますか、static class ThumbnailTask
それともアダプタ クラスの外側に配置されていますか? アダプタークラスの内部にも配置されていますか(私はそうしました。表示される各アイテムに辞任されているstatic class ViewHolder
ことがわかります)?ViewHolder
public View getView(int position, View convertView,
ViewGroup parent) {
ViewHolder holder;
...
holder.position = position;
new ThumbnailTask(position, holder)
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null);
return convertView;
}
private static class ThumbnailTask extends AsyncTask {
private int mPosition;
private ViewHolder mHolder;
public ThumbnailTask(int position, ViewHolder holder) {
mPosition = position;
mHolder = holder;
}
@Override
protected Cursor doInBackground(Void... arg0) {
// Download bitmap here
}
@Override
protected void onPostExecute(Bitmap bitmap) {
if (mHolder.position == mPosition) {
mHolder.thumbnail.setImageBitmap(bitmap);
}
}
}
private static class ViewHolder {
public ImageView thumbnail;
public int position;
}