在我的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
项内的布局事件(不是整个列表项本身)?
编辑:适配器功能ListView
和onNotifyDataSetChanged()
似乎也没有刷新列表。
答案 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!