Android 如何在listview的列表项中的图像视图上设置单击侦听器
我正在实现一个在listview中使用的自定义适配器。我正在用一些文本消息和我的一个对象类填充listview。每个列表项中都有一个imageview,单击该imageview我将显示一个包含对象信息的视图,单击listview项我将显示一个不同的视图。我能够做到这一点,但这里的问题是,当我单击imageview时,打开的视图包含一些其他列表项对象的信息,而不是包含在其图像视图被单击的列表项中的对象。我尝试了很多方法来获得解决方案,但没有得到解决方案。所以我提出这个问题,请帮帮我Android 如何在listview的列表项中的图像视图上设置单击侦听器,android,listview,custom-adapter,Android,Listview,Custom Adapter,我正在实现一个在listview中使用的自定义适配器。我正在用一些文本消息和我的一个对象类填充listview。每个列表项中都有一个imageview,单击该imageview我将显示一个包含对象信息的视图,单击listview项我将显示一个不同的视图。我能够做到这一点,但这里的问题是,当我单击imageview时,打开的视图包含一些其他列表项对象的信息,而不是包含在其图像视图被单击的列表项中的对象。我尝试了很多方法来获得解决方案,但没有得到解决方案。所以我提出这个问题,请帮帮我 这是我的自定义
listView = ((ListView)this.findViewById(R.id.listTaskView));
listView.setAdapter(simpleAdapter);
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Task task = null;
@SuppressWarnings("unchecked")
Map<String, Object> listItem = (Map<String, Object>) listView
.getItemAtPosition(position);
task = (Task) listItem.get("item");
if (task != null) {
activeTask = task;
//method called when listview item is clicked
showActivityListView(view);
}
}
}
});
listView=((listView)this.findViewById(R.id.listTaskView));
setAdapter(simpleAdapter);
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
Task=null;
@抑制警告(“未选中”)
映射列表项=(映射)列表视图
.getItemAtPosition(位置);
task=(task)listItem.get(“项”);
如果(任务!=null){
活动任务=任务;
//单击listview项时调用的方法
showActivityListView(视图);
}
}
}
});
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/taskPercentage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/blue_shade"
android:textSize="20sp"
android:textStyle="bold" >
</TextView>
<LinearLayout
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:layout_weight="1"
android:orientation="vertical"
android:paddingLeft="0px"
android:paddingRight="5dp" >
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/taskname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:textColor="#FFF38585"
android:textSize="15sp" >
</TextView>
<ImageView
android:id="@+id/edit_task"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:src="@drawable/edit_form"/>
</RelativeLayout>
<TextView
android:id="@+id/taskdesc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textColor="#FF2CE4A4"
android:textSize="13sp" >
</TextView>
</LinearLayout>
</LinearLayout>
这是实现参考。如果有人能告诉我问题是什么,或者如何使此功能正常工作,请务必帮助我。提前谢谢。从您的
main活动
或片段
,您应该初始化列表视图
,并设置其适配器。您还应该在其中设置onItemClickListener
(MainActivity
)。然后从列表中获取给定位置
参数中的对象
,并根据它执行操作
示例:
ListView listViewItems = new ListView(this);
listViewItems.setAdapter(adapter);
listViewItems.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(getApplicationContext(),
"Click ListItem Number " + position, Toast.LENGTH_LONG)
.show();
}
});
ListView listViewItems=新建ListView(此);
setAdapter(适配器);
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
Toast.makeText(getApplicationContext(),
“点击列表项目编号”+位置,烤面包片长度(长)
.show();
}
});
您可以创建自己的对象
类并将其传递到列表,然后检查项目位置并执行操作
我希望它有帮助试试:
final ImageView taskEdit = (ImageView)convertView.findViewById(R.id.task_edit);
taskEdit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
newTask(taskEdit, false);
}
});
return convertView;
}
你也可以发布newTask代码吗?我尝试将imageview声明为final,但没有成功。我将添加我的实现的更多代码片段以供参考。感谢您到目前为止的支持。我已经提供了一些更多信息,如果您能够解决问题,请与我联系。我已经提供了一些更多信息,如果您能够解决问题,请与我联系。顺便说一下,在提出这个问题之前,我已经实现了ListView实现,就像您在回答中所写的那样。但这不是问题所在。问题是,我能够导航到所需的视图,但信息不正确。i、 e假设我在列表项图像视图的第三个位置进行了剪切,我得到的值是列表项图像视图中第六个列表项中包含的对象的值。通过放置一些日志,我观察到getView()适配器类的方法被多次调用。单击图像视图时打开的视图包含的对象信息与调用getView()方法的次数相同。i、 e如果getView()方法在填充listview时被调用了6次,则图像视图的clikc上包含位置6处任务对象的信息
ListView listViewItems = new ListView(this);
listViewItems.setAdapter(adapter);
listViewItems.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(getApplicationContext(),
"Click ListItem Number " + position, Toast.LENGTH_LONG)
.show();
}
});
final ImageView taskEdit = (ImageView)convertView.findViewById(R.id.task_edit);
taskEdit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
newTask(taskEdit, false);
}
});
return convertView;
}