2013-01-20 100 views
0

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

的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" /> 

我上点击功能代码:

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

    ViewParent v = iView.getParent(); 
} 

回答

0

使用匿名内部类:

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'。

+0

我有onClickListener。但是现在我需要知道这个onClick是什么ListViewItem。但我怎么能得到ListViewItem的位置? – Styler2go

+0

刚刚阅读这个帖子http://stackoverflow.com/questions/5934552/how-to-get-position-of-clicked-item-in-onclicklistener-of-listview,你现在可以使用整数的'位置' – ObAt

+0

我认为你错过了我的意思。我有ListView。每个项目都有一个onItemClick事件。但是在每个ListViewItem中都是一个ImageView。这ImageView shoudl有另一个不同的OnItemClick。但是:如何? – Styler2go

0

子类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

我相信View层次结构将优先考虑点击ImageView(而不是整个列表项),但我可能是错的。