各行に ImageView を持つ ListView があります。
getView 関数の各行に画像をロードする customAdapter があります。
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.list_row, parent, false);
ViewHolder viewHolder = new ViewHolder();
viewHolder.listImage = (ImageView) row
.findViewById(R.id.list_image);
viewHolder.title = (TextView) row.findViewById(R.id.title);
viewHolder.description = (TextView) row
.findViewById(R.id.description);
row.setTag(viewHolder);
}
ItemDescription des = getItemDescriptionFromFile(items.get(position)
+ "/description.txt");
ViewHolder holder = (ViewHolder) row.getTag();
holder.title.setText(des.title);
holder.description.setText(des.description+(position)%5);
holder.listImage.setImageBitmap(getBitmapFromAsset(items.get(position));
return row;
}
private Bitmap getBitmapFromAsset(String strName) {
InputStream istr = null;
try {
istr = assetManager.open(strName);
} catch (IOException e) {
e.printStackTrace();
}
Bitmap bitmap = BitmapFactory.decodeStream(istr);
return bitmap;
}
しかし、リストのスクロールがスムーズではないことに気付きました。
私は自分の問題をグーグルで検索しましたが、このリンクが解決策のようです: http://developer.android.com/training/improving-layouts/smooth-scrolling.html
ただし、このコードにはいくつかの問題があります。
new AsyncTask<ViewHolder, Void, Bitmap>() {
private ViewHolder v;
@Override
protected Bitmap doInBackground(ViewHolder... params) {
v = params[0];
return mFakeImageLoader.getImage();
}
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
if (v.position == position) {
// If this item hasn't been recycled already, hide the
// progress and set and show the image
v.progress.setVisibility(View.GONE);
v.icon.setVisibility(View.VISIBLE);
v.icon.setImageBitmap(result);
}
}
}.execute(holder);
位置が最終ではないため、内部クラス AsyncTask 内の位置にアクセスできません。
位置にアクセスする方法はありますか?
リストをスムーズにスクロールするにはどうすればよいですか?
前もって感謝します。