在listview项目中为布局定义LongClick事件

时间:2014-06-02 13:27:15

标签: android listview android-adapter

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

<RelativeLayout>
    android:onClick="event"
</RelativeLayout>

然后在我的活动中调用该方法:

public void event(View view)
{
    final int position = list.getPositionForView((View) view.getParent());
    // do action here
}

但是,android:onLongClick(不幸的是)没有XML定义。

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

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

请记住,事件需要能够刷新列表后面的数据(例如,我需要在列表上调用setAdapter()来刷新它),如何正确定义{{1}每个OnLongClickListener项内的布局事件(不是整个列表项本身)?

编辑:适配器功能ListViewonNotifyDataSetChanged()似乎也没有刷新列表。

1 个答案:

答案 0 :(得分:0)

我解决了!

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

private MyActivity parentActivity;

public MyAdapter(MyActivity pa)
{
    this.parentActivity = pa;
}

在我的MyActivity课程中,我定义了一个刷新列表视图的公共方法:

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

然后,最后,在MyAdapter中,我只需调用this.parentActivity.loadData();来刷新列表。 Simples!