android惊人的listview onclick事件问题
我在我的android应用程序中使用android惊人的listview,我想在用户单击listview中的某个项目时显示一些详细信息。但问题是,当我在项目上设置click listener时,它也会将标题部分作为一个项目进行侦听。下面是我的代码,您还可以查看XML文件android惊人的listview onclick事件问题,android,onclick,android-listview,Android,Onclick,Android Listview,我在我的android应用程序中使用android惊人的listview,我想在用户单击listview中的某个项目时显示一些详细信息。但问题是,当我在项目上设置click listener时,它也会将标题部分作为一个项目进行侦听。下面是我的代码,您还可以查看XML文件 @Override public View getAmazingView(int position, View convertView, ViewGroup parent) { View res
@Override
public View getAmazingView(int position, View convertView, ViewGroup parent) {
View res = convertView;
if (res == null) res = getLayoutInflater().inflate(R.layout.menu_item, null);
TextView lName = (TextView) res.findViewById(R.id.lName);
TextView lYear = (TextView) res.findViewById(R.id.lYear);
LinearLayout item = (LinearLayout) res.findViewById(R.id.item);
Items composer = getItem(position);
lName.setText(composer.title);
lYear.setText(composer.summary);
// here I set my click listener just for the item
item.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "OnClick event !!!", Toast.LENGTH_LONG).show();
}
});
return res;
}
下面是项目的XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/menu_item" >
<include
layout="@layout/menu_header"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:id="@+id/item"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical"
android:padding="6dp"
android:clickable="true" >
<TextView
android:textStyle="bold"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/lName" />
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:id="@+id/lYear" />
</LinearLayout>
任何帮助都将不胜感激。您需要在实际的
列表视图上使用setOnClickListener
,而不是对每个项目使用setOnClickListener
:
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(view.getTag() != NULL) {
//deal with click on item at position "position"
}
}
});
listView.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
if(view.getTag()!=NULL){
//处理“位置”处的点击项目
}
}
});
并删除将侦听器附加到各个项目的代码
编辑现在我对AmazingListView文档进行了更多的回顾,我意识到您需要对其进行更多的修改。在getAmazingView
中创建视图时,请先将标记设置为1,然后再返回要支持该项目的每个项目的视图。在视图中创建子标题或其他非项目单击启用的元素时,请将其标记设置为null
。然后,在处理单击之前检查标记(请参阅上面代码中的更新)。这里您可以在适配器类中为项添加单击侦听。它只对一个项目采取行动(我没有测试)。若要在其中添加单击侦听器,最好在列表视图中添加单击侦听器
请查收这封信。下面是列表视图示例
谢谢我终于找到了为什么在单击项目时标题也被单击的原因
原因是我使用了AmazingListView。因此,根据该库,标题和项是列表中的同一项。当标题转到列表视图的顶部时,标题的副本将被绘制,以将其固定到列表的顶部。嘿,Aleks,我尝试了很多方法,包括您的解决方案,但问题不在于单击事件。Click事件工作得很好,但在我向下滚动并单击标题的情况下,标题的行为就像它的z索引低于项目的z索引一样。因此,每当我尝试单击它时,它都会单击标题下的项目。单击事件的标题始终处于非活动状态,除非标题下没有项目,列表未向下滚动。你有什么其他的建议吗?你可以通过使用这个代码来检查我的意思<代码>res.findViewById(R.id.item).setOnClickListener(新OnClickListener(){@Override public void onClick(视图v){Toast.makeText(上下文,“item!”+“”+位置,Toast.LENGTH_SHORT).show();});res.findViewById(R.id.header).setOnClickListener(新OnClickListener(){@Override public void onClick(视图v){Toast.makeText(上下文,“header!”+“”+位置,Toast.LENGTH_SHORT).show();})代码>我试图在上面的代码中同时单击项目和标题。@osayilgan您是否尝试过主动捕获标题上的“单击”事件,然后丢弃它们?也就是说,不管点击如何,总是捕捉点击,但如果点击在标题上,则忽略它。这里我只在标题上监听点击事件。当我点击标题时,它会直接点击标题下的项目。当标题下没有项目时(当标题最多位于列表顶部时),标题单击可以工作,但当我向下滚动列表时,单击标题不再响应<代码>res.findViewById(R.id.header).setOnClickListener(新OnClickListener(){@Override public void onClick(视图v){Toast.makeText(上下文,“header!”+“”+位置,Toast.LENGTH_SHORT).show();})代码>我最终发现,在用户向下滚动列表并将标题固定到列表顶部之后,惊人的listview正在为标题绘制画布。这就是为什么我们不能监听标题的点击事件,这就是为什么当我点击标题时,它会点击标题下的项目。我不知道怎么做,但我会尝试听这个画布的点击事件,然后放弃它。我有同样的问题。你找到解决这个问题的办法了吗?看起来像是getAmazingView
在滚动时导致行项目的位置错误。这是很久以前的事了,据我记忆所及,我没有解决方案。