【问题标题】:Listen for View (List Header) onTouch event and disable scroll on ListView监听 View (List Header) onTouch 事件并禁用 ListView 上的滚动
【发布时间】:2012-07-09 14:24:21
【问题描述】:

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

如果你想知道为什么这个疯狂的实现? - 我基本上是在我的 listView 标题上构建一个自定义搜索栏,它适用于 MotionEvent.ACTION_MOVE 并且因为视图是列表视图的标题在用户从此自定义标题视图中取消触摸之前不应滚动。

所以我的问题/问题是。

现在我有 2 个 java 类。 Activity(具有此列表视图)和自定义 Header(实现 OnTouchListenerView)。

  1. 当我的标题视图被触摸到此列表视图(活动)以禁用滚动时,如何传递值?
  2. 似乎可以通过覆盖dispatchTouchEvent 来禁用列表视图滚动,如here 所说。由于我的不是自定义列表视图,是否可以在活动类本身中禁用?

对不起,我只是学习,所以请不要介意我的新手。

【问题讨论】:

    标签: java android android-layout android-listview


    【解决方案1】:

    好的,我对我提出的问题有点沉默,所以我正在回答我问题的前半部分。

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

    我的解决方案是创建interface。所以我创建了一个public static interface,它有一个public void headerTouched(Boolean touchEvent); 方法。我的具有listView 代码的类是implementer,因此它会自动从接口类覆盖此方法。在这个类中,我创建了一个私有变量(在我的例子中: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)

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 2012-09-19
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多