侦听View(List Header)onTouch事件并禁用ListView上的滚动

时间:2012-07-09 14:24:21

标签: java android android-layout android-listview

当用户触摸列表标题并执行MotionEvent.ACTION_MOVE时,我基本上尝试禁用列表视图上的滚动。

如果你想知道为什么这个疯狂的实现? - 我基本上是在我的listView Header上构建一个自定义搜索条,它可以在MotionEvent.ACTION_MOVE上工作,因为视图是列表的标题查看它不应滚动,直到用户从此自定义标题视图中取消触摸。

所以我的问题/问题是。

现在我有2个java类。活动(具有此列表视图)和自定义标题(实现View的{​​{1}})。

  1. 如果触摸此标题视图时,如何将值传递给此列表视图(活动)以禁用滚动?
  2. 似乎可以通过覆盖OnTouchListener作为上述here来禁用列表视图滚动。由于我的不是自定义列表,因此可以在活动类本身中禁用它吗?
  3. 对不起,我刚刚学习,所以请不要介意我的新意。

1 个答案:

答案 0 :(得分:1)

好吧,在我提出的问题上,我的安静很少,所以我在回答问题的前半部分。

当我的标题视图被触摸到此列表视图(活动)以禁用滚动时,如何传递值?

我在创建interface时获得了解决方案。所以我创建了一个public static interface,它有一个public void headerTouched(Boolean touchEvent);方法。我的具有listView代码的类是implementer,因此它会自动从接口类重写此方法。我在这个类中创建了一个私有变量(在我的例子中:boolean),它监听从驱动程序类返回的boolean值。我的驱动程序类是具有此接口对象的HeaderView,通过它我设置了值。为了帮助接口上的新手,我在下面发布了我的代码。

接口类

public static interface HeaderTouchListener{
    public void headerTouched(Boolean touchEvent);
}

实施者类

private boolean headerTouched = false;
public void headerTouched(Boolean touchEvent) {
    headerTouched = touchEvent;
}

驱动程序类

HeaderTouchListener touchListner = new ImplementerClassName();
touchListner.headerTouched(true);

我仍然无法弄清楚如何禁用列表视图上的滚动。有关它的更多信息,请关注此问题Set dispatchTouchEvent for List View without creating custom List View class. (for disabling scroll)