添加第二个onclick到Listview



我想添加第二个on click到ListViewItem。我已经创建了视图(ImageView),并设置了on Click。函数被调用。但是:我怎样才能得到这个ListViewItem的信息?在ListView中获得位置就足够了吗?

ImageView:

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="right|center_vertical"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:onClick="favorite"
    android:src="@drawable/star" />

on click函数的代码:

public void favorite(View view){
    ImageView iView = (ImageView) view;
    iView.setImageResource(R.drawable.star_checked);
    ViewParent v = iView.getParent();
}

使用匿名内部类:

  ImageView iView = (ImageView) findViewById(R.id.imageView1);
  iView.setOnClickListener(new OnClickListener(){
            public void onClick(View v) {
                //Your code
            }
        });
myListView.setOnItemClickListener(new OnItemClickListener() {     ![enter image description here][2]
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    String value = myListView.getAdapter().getItem(position).toString(); // String value of the clicked item
                    //Code
                    }
                  });

如果你想做更大的应用程序,你应该考虑更好地命名你的组件,'imageView1'不是很方便。将组件命名为"imageview_main"或"imageview_customerdetails"

子类OnItemClickListener而不是OnClickListener。

编辑:

好了,我想我明白你现在想做什么了。我将继承你的ListAdapter并重写getView(int position, ...)方法,如下所示:

private OnClickListener mImgClickListener = new OnClickListener() {
        @Override
        public void onClick(View view) {
            int position = (Integer) view.getTag();
            // do stuff with position knowledge!
        }
    });
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView != null) {
        v = convertView;
    } else {
        v = newView(int position);
    }
    v.findViewById(R.id.imageView1).setTag(position);
    return v;
}
private View newView(int position) {
    View v;
    // inflate your view here
    View imageView = v.findViewById(R.id.imageView1);
    imageView.setOnClickListener(mImgClickListener);
    return v;
}

当然,更好的方法是在getView方法中实现ViewHolder模式,以消除对findViewById的昂贵调用。

我相信视图层次结构将照顾给予优先级点击ImageView(而不是列表项作为一个整体),但我可能是错的。

最新更新