android惊人的listview onclick事件问题

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

我在我的android应用程序中使用android惊人的listview,我想在用户单击listview中的某个项目时显示一些详细信息。但问题是,当我在项目上设置click listener时,它也会将标题部分作为一个项目进行侦听。下面是我的代码,您还可以查看XML文件

    @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
在滚动时导致行项目的位置错误。这是很久以前的事了,据我记忆所及,我没有解决方案。