如何在ListView中的ImageView中设置OnClickListener?

时间:2014-01-13 16:16:10

标签: android listview row listener

我有一个ListView,每行都有一些项目。其中一个项目是ImageView可点击。我创建了一个单独的Adapter类来创建ListView并用所有项填充它。

在我的Activity中,我设置了此适配器,如下所示:

//myScenesArray is the array of items I want to fill in the Adapter
ListView listView = (ListView) findViewById(R.id.sceneslistview);
ListViewScenesAdapter customListAdapter = new ListViewScenesAdapter(this.getBaseContext(), R.layout.scenesrow, myScenesArray);
listView.setAdapter(customListAdapter);

我可以为每一行创建一个Listener,如下所示:

listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id){
    //here I put what I want to do when Listener is activated
});

但是如何为行内的项目创建一个监听器?

我只访问适配器中我的行的项目...查看下面的代码,我的适配器的方法getView(),当我填充所有元素时:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    Log.i("ADAPTER DE CENAS","ENTROU NO getView()!!!");
LayoutInflater inflater = (LayoutInflater)
    context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(layoutResourceId, parent, false);
    ImageView left = (ImageView)row.findViewById(R.id.left);
    left.setImageBitmap( (data.get(position)).getVisualImage() );
    TextView middle = (TextView)row.findViewById(R.id.text);
    middle.setText( (data.get(position)).getVisualName() );
    View right = row.findViewById(R.id.right);
    right.setTag(position);
    return row;
}

我可以访问Activity中每行的元素吗?

我想在每一行中为一个名为right(R.id.right)的View设置一个Listener。我感谢任何帮助。

更新

我已将上下文作为Adapter类的变量。我将发布Adapter类的开头:

public class ListViewScenesAdapter extends ArrayAdapter<Scene> {

Context context;
int layoutResourceId;
ArrayList<Scene> data = new ArrayList<Scene>();

public ListViewScenesAdapter(Context context, int layoutResourceId, ArrayList<Scene> data) {
    super(context, layoutResourceId, data);
    Log.i("ADAPTER DE CENAS","ENTROU NO CONSTRUTOR!!!");
    this.layoutResourceId = layoutResourceId;
    this.context = context;
    this.data = data;
}

Adapter类具有上面的构造函数,已经提到的getView方法和变量:context,layoutResourceId和data。

但我不知道如何在Adapter类中执行监听器。任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:2)

将侦听器设置为适配器的ImageView方法中的getView。如果需要访问活动中的任何变量,只需将它们作为参数传递给适配器构造函数即可。

// This will set separate listeners to all of the right views.
right.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
          // Do whatever you want here, you can use the position variable to handle current view specifically  
          data.get(position); // this is the data you have in this listView item       
      }
);

答案 1 :(得分:2)

在getView()

中使用它
holder.imgIcon.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
             Toast.makeText(getApplicationContext(),"ImageClick"+position, Toast.LENGTH_LONG).show();  

        }

});

答案 2 :(得分:1)

您应该可以在getView中完成。

如果您需要访问上下文中的任何信息,您只需在Context的构造函数中传递Adapter并从中获取任何信息。

你可以这样做:

right.setOnClickListener(new OnClickListener(){
    public void onClick(View view){
        Toast.makeText(context,"You clicked image " + position,Toast.LENGTH_LONG).show();
    }
}