【问题标题】:onClick listener to a ListView Image - AndroidListView 图像的 onClick 侦听器 - Android
【发布时间】:2012-05-23 07:19:48
【问题描述】:

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

我知道基本的OnClick listener 实现,但这对我来说似乎有点棘手: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); 是用于执行此任务的数据库助手。就像我现在说的,我需要一种方法来通过单击图像来执行相同的过程,而不是整个列表元素,我希望列表元素稍后执行一些其他操作。

我希望现在我有点清楚了。


解决方案:

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

 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);
}

}

我知道编码有点蹩脚,所以请耐心等待,我只是想展示一下实际的过程。

它对我有用:)

【问题讨论】:

    标签: android listview onclicklistener


    【解决方案1】:

    你应该在你的 Adapter 中这样做 而不是在 Activity 中。

    yourImg.setOnClickListener(new OnClickListener() {
    
        @Override
        public void onClick(View v) {
            // things you want to do 
        }
    });
    

    【讨论】:

    • 如何确定列表元素的当前状态?任何指针或标识符??
    • “当前状态”是什么意思?
    【解决方案2】:

    创建一个接口用于从适配器到活动的通信

    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
        }         
    }
    

    【讨论】:

    • 不错的@Satheesh :) +1 ;)
    【解决方案3】:

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

    //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();
    
    }
    }
    

    它对我有用,享受!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 2012-11-09
      相关资源
      最近更新 更多