onClick侦听器到ListView图像 - Android

时间:2012-05-23 07:19:49

标签: android listview onclicklistener

我有ListView,右侧有一张图片。我想通过点击onClick上的图片来执行ListView侦听器事件。请参阅图片以供参考。

enter image description here

我知道基本的OnClick监听器实现,但这对我来说似乎有点棘手:P

忘记提及,通过点击实际的ListView将拍摄一个新的活动,所以我需要保留两个模式。

 listView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            eventsData.remove(id);
            cursor.requery(); 
        }

    });   

上面的代码通过单击任何列表元素来执行删除eventsData.remove(id);是用于执行此任务的数据库帮助程序。就像我现在说的,我需要一个方法来执行相同的过程juts,点击图像,而不是整个列表元素,我希望list元素稍后再做一些其他操作。

我希望现在我清楚一点。


解决方案:

如果有人遇到同样的情况,那么这里是适配器的完整代码。

 class CustomAdapter extends ArrayAdapter<String> {
 CustomAdapter() {
  super(Activity.this, R.layout.row, R.id.label, items);
}

public View getView(final int position, View convertView,
                    ViewGroup parent) {
  View row=super.getView(position, convertView, parent);
  deleteImg=(ImageView)row.findViewById(R.id.icon);

  deleteImg.setImageResource(R.drawable.delete);      
  deleteImg.setOnClickListener(new OnClickListener() {
      String s = items[position];
    @Override
    public void onClick(View v) {
        Toast.makeText(context, s, Toast.LENGTH_SHORT).show();          
    }
});

  return(row);
}

}

我知道编码有点糟糕所以请耐心等待,我只想展示实际的过程。

这对我有用:)

3 个答案:

答案 0 :(得分:9)

您应该在Adapter 而不是Activity中执行此操作。

yourImg.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // things you want to do 
    }
});

答案 1 :(得分:3)

  

创建一个接口,用于从适配器到活动

进行通信
public interface ListenerActivity        
{    
public void Remove();    
}

在适配器类中:

class CustomAdapter extends ArrayAdapter<String> {

ListenerActivity listener;

CustomAdapter(YourActivity obj) {
  super(Activity.this, R.layout.row, R.id.label, items);

  listener=obj;
}
 public View getView(final int position, View convertView,
                ViewGroup parent) {
ImageId.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        listener.Remove();
    }
});
}

在您的活动中:

class MyActivity extends Activity implements ListenerActivity
{
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
}
 @Override
    public void Remove() {

//Do your remove functionality here
    }         
}

答案 2 :(得分:2)

添加到最后一个答案并回答这个答案,我在删除项目或其他操作后添加了一些代码来刷新视图:

//in your adapter you have to get list of items:

 public CartListAdapter(Context context, int resourceId,
        List<CartItemModel> items) {
    super(context, resourceId, items);
    this.context = context;
    this.items= items;
}

//after that you have to set a listner on the imageView like this:

public View getView(int position, View convertView, ViewGroup parent) {
   holder.imageViewDelete.setOnClickListener(new imageViewClickListener(position));
   // some other lines code ...
   // here we get the item to remove
    rowItem= getItem(position);
    }

//and here the definition of the listner:

private class imageViewClickListene implements OnClickListener {
   int position;
    public imageViewClickListene( int pos)
        {
            this.position = pos;
        }

    public void onClick(View v) {

    // here we  remove the selected item    
        items.remove(rowItem);
            // here we refresh the adapter
        CartListAdapter.this.notifyDataSetChanged();

}
}

它适合我,享受!!

相关问题