データベースにデータを表示するために SimpleCursorTreeAdapter を使用しています。ローダーを使用してすべてのカーソルを管理しています。すべて正常に動作します。ただし、各子ビューにはいくつかの画像があります。これにより、スクロール時に顕著なカクつきが発生します。したがって、非同期タスクを使用してバックグラウンドで画像をデコードしたいと考えています。(疑似コード) のようなもの:
@Override
protected void bindChildView(View view, Context context, Cursor cursor, boolean isLastChild) {
super.bindChildView(view, context, cursor, isLastChild);
String imgFile = cursor.getString(MyDatabaseHelper.FILE_INDEX);
new asyncLoadImage().execute(imgFile);
}
private class asyncLoadImage extends AsyncTask<String, Void, Bitmap> {
@Override
protected Bitmap doInBackground(String... arg0) {
String imgFile = arg0[0];
return Utils.getBitMap(imgFile);//psuedocode
}
@Override
protected void onPostExecute(Bitmap bm) {
ImageView imageView = new ImageView(mCtx);
imageView.setTag(mID);
imageView.setImageBitmap(bm);
//ok got the imageview. where do I append it ??
}
}
onPostExecute() 関数で imageview の準備が整うまでに、bindChildView で提供されるビューはリサイクルされ、別の子要素を指している可能性があります。イメージビューを追加する場所を決定するにはどうすればよいですか?