我想在ListViewItem中添加第二个on click
。
我已经创建了View(ImageView)并且我设置了Click 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" />
点击功能的代码:
public void favorite(View view){
ImageView iView = (ImageView) view;
iView.setImageResource(R.drawable.star_checked);
ViewParent v = iView.getParent();
}
答案 0 :(得分: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'。
答案 1 :(得分: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上的点击(而不是整个列表项),但我可能错了。