我目前在我的应用程序中使用(或至少尝试使用)Droidparts ImageFetcher。 有一些示例代码可以显示它如何与CursorAdapter一起工作,但我还没有能够理解所有这些并使用我的ArrayAdapter复制它。我想我理解InjectDependency的东西是如何工作的,但如果可以进一步解释或不包括在答案中,我将不胜感激。
无论如何,我的问题是,一旦它们被回收,我如何阻止我的imageViews加载错误的图像?我已经尝试将ImageHolder作为标记添加到视图中,但它没有工作,我无法看到它背后的逻辑......
这是我的代码:
@Override
public View getView( int position, View view, ViewGroup parent )
{
if( view == null )
{
LayoutInflater inflater = ( LayoutInflater ) m_context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
view = inflater.inflate( m_resourceId, parent, false );
}
TextView titleView = ( TextView ) view.findViewById( R.id.title );
if( titleView != null ) titleView.setText( m_values.get( position ).title );
ImageView imageView = ( ImageView ) view.findViewById( R.id.image );
if( imageView != null )
{
imageView.setImageDrawable( null );
ViewHolder holder = new ViewHolder();
holder.imageView = imageView;
m_imageFetcher = new ImageFetcher( m_context );
m_imageFetcher.attachImage(m_values.get( position ).imageUrl, holder.imageView, null, 10, null);
view.setTag(holder);
}
return view;
}
非常感谢任何指针或示例,谢谢!
答案 0 :(得分:1)
我建议您扩展已包含org.droidparts.adapter.widget.ArrayAdapter
实例的LayoutInflater
。
如果你这样做,这是代码,逻辑应该很容易理解:
public class MyArrayAdapter extends ArrayAdapter<MyModel> {
private final ImageFetcher imageFetcher;
public MyArrayAdapter(Context ctx, List<MyModel> list) {
super(ctx, list);
imageFetcher = new ImageFetcher(ctx);
}
@Override
public View getView(int position, View view, ViewGroup parent) {
if (view == null) {
view = layoutInflater.inflate(m_resourceId, null);
ViewHolder holder = new ViewHolder();
holder.titleView = ViewUtils.findViewById(view, R.id.title);
holder.iconView = ViewUtils.findViewById(view, R.id.image);
view.setTag(holder);
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.iconView.setImageDrawable(null);
MyModel item = getItem(position);
holder.titleView.setText(item.title);
imageFetcher.attachImage(item.iconUrl, holder.iconView);
return view;
}
private static class ViewHolder {
TextView titleView;
ImageView iconView;
}
}
同时检查它的setContent(...)
方法,作为在构造函数中提供对象列表的替代方法。
当然,请确保您已声明<uses-permission android:name="android.permission.INTERNET" />
。