Android 为listview项内的布局定义长单击事件

Android 为listview项内的布局定义长单击事件,android,listview,android-adapter,Android,Listview,Android Adapter,在我的listview项的XML布局中,我使用: <RelativeLayout> android:onClick="event" </RelativeLayout> 然而,android没有XML定义:onLongClick 使用此方法,我可以根据按下项目中的哪个布局调用不同的方法。当我决定需要在其中一个布局中添加OnLongClickListener时,我遇到了这个问题。由于此侦听器需要在列表中每行的项目级别上完成,而不是在整个列表中完成,因此我认为无法将此

在我的listview项的XML布局中,我使用:

<RelativeLayout>
    android:onClick="event"
</RelativeLayout>
然而,android没有XML定义:onLongClick

使用此方法,我可以根据按下项目中的哪个布局调用不同的方法。当我决定需要在其中一个布局中添加OnLongClickListener时,我遇到了这个问题。由于此侦听器需要在列表中每行的项目级别上完成,而不是在整个列表中完成,因此我认为无法将此侦听器添加到我的活动中

我解决这个问题的第一次尝试是将OnLongClickListener附加到适配器的getView方法中的布局中,有效地向列表中的每一行添加一个侦听器,这很有效。唯一的问题是,据我所知,您似乎无法从适配器中刷新列表本身

请记住,事件需要能够刷新列表后面的数据,例如,我需要调用列表上的setAdapter来刷新它,如何才能正确地为每个ListView项(而不是整个列表项本身)中的布局定义OnLongClickListener事件

编辑:适配器函数onNotifyDataSetChanged和onnotifydatasetvalidated似乎也不会刷新列表。

我已经解决了

在我的适配器中,我向构造函数添加了一个新参数,传入了对我的活动的引用,如下所示:

private MyActivity parentActivity;

public MyAdapter(MyActivity pa)
{
    this.parentActivity = pa;
}
在MyActivity类中,我定义了一个用于刷新listview的公共方法:

public void loadData()
{
    // calls an asynchronous task to refresh the list
    new LoadDataTask().execute();
}

最后,在MyAdapter中,我简单地称之为this.parentActivity.loadData;刷新列表。傻瓜

在适配器中,您可以调用this.notifyDatasetChanged或this.notifyDataSetionValidated。这应该会刷新您的列表。@非常感谢,但是当我从适配器中调用这些函数时,它们似乎都不会刷新列表。我也见过其他用户这样说。是否有替代方案?如果它不起作用,那么我会更仔细地查看您当前的代码。找到一个解决方法只会掩盖潜在的错误代码,这些代码可能会在以后对您造成影响。啊,您没有说您希望刷新支持ListView的数据,而不是该数据的表示。我假设数据集已经更改,您无法在UI中更新更改。你应该接受你的答案,或许可以看看你的问题,看看你是否能更清楚地告诉未来的读者你想做什么。在48小时过去之前,你不能接受我自己的答案。也许我应该说刷新数据而不是刷新列表。我的错。谢谢你的帮助。
public void loadData()
{
    // calls an asynchronous task to refresh the list
    new LoadDataTask().execute();
}