我有一个 ListView,每行都有一个 ImageView。
我有一个 customAdapter 为 getView 函数中的每一行加载图像。
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 中的位置,因为位置不是最终位置。
有什么方法可以访问位置吗?
使我的列表平滑滚动的最佳方法是什么?
提前致谢。