通用图像加载器:从Tap获取ImageView对象

时间:2015-05-11 19:34:39

标签: java android baseadapter universal-image-loader

在梳理了UIL的示例项目之后,我发现了一个问题。

这是他们的代码为onItemClickListener显示的内容。我需要返回ImageView对象,而不是null。

@Override
public Object getItem(int position)
{
    return null;
}

他们实际上并未从某个位置返回该项目。我无法覆盖此方法,但我完全不知道如何退回该项目。我看过谷歌I / O谈论ListAdapters(https://www.youtube.com/watch?v=wDBM6wVEO70),他们说不要缓存图像列表,然后根据它返回位置(因为当垃圾收集器做它的东西时你会得到不稳定的行为)

那么你能告诉我如何从UIL ImageAdapater(BaseAdapter)对象中获取ImageView对象吗?

1 个答案:

答案 0 :(得分:1)

这不是UIL的问题。 adapter本身处理的数据列表不是视图。因此,getItem会提供数据及其数组索引(代码中为position),而非您点击的ImageView

要从适配器传递View对象,您需要在ViewHolder ImageView事件中使用Listener传递OnClick对象。

首先,定义界面。

public interface ViewClickListener {
    void onClickView(View view);
}

在您充气的视图布局中,添加以下代码。

private ViewClickListener viewClickListener;
public void setViewClickListener(ViewClickListener listener) {
    this.viewClickListener = listener;
}

并且,在适配器视图中,

    imageView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            if (viewClickListener!= null)
                viewClickListener.onClickView(view);
        }
    });

在包含适配器的类中,

public class SomeActivity implements ViewClickListener  {

    @Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
        yourAdapter.setViewClickListener(this); // listens onclick event inside of adapter view.            
    }

    @Override
    onClickView(View view){
          Log.d("Test", view); // your clicked ImageView comes here.
    }
}