在 ViewPager 中捕获滑动以关闭列表视图手势

Posted

技术标签:

【中文标题】在 ViewPager 中捕获滑动以关闭列表视图手势【英文标题】:Capture swipe to dismiss listview gestures in ViewPager 【发布时间】:2013-11-19 08:10:12 【问题描述】:

我有一个ListView,它可以捕捉滑动手势来删除一行。这个ListView 住在Fragment 中。在手机上,这是它自己的 Activity 并且效果很好。在平板电脑上,Fragment 位于ViewPager 中,而ListView 永远无法捕获任何滑动事件,因为它们总是转到ViewPager

在将滑动手势传递给ViewPager 之前,我将如何确保ListView 捕获滑动手势以进行消费?

附: 我正在使用this library 滑动以消除ListView 中的手势

【问题讨论】:

【参考方案1】:

在将滑动手势传递给 ViewPager 之前,我将如何确保 ListView 捕获并使用滑动手势?

创建ViewPager 的子类并覆盖canScroll()。如果提供的ViewListView,则返回true 以将触摸事件提供给ListView

例如,这是我在一些示例中使用的一个类,用于在 ViewPager 中托管地图:

/***
  Copyright (c) 2013 CommonsWare, LLC
  Licensed under the Apache License, Version 2.0 (the "License"); you may not
  use this file except in compliance with the License. You may obtain a copy
  of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required
  by applicable law or agreed to in writing, software distributed under the
  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
  OF ANY KIND, either express or implied. See the License for the specific
  language governing permissions and limitations under the License.

  From _The Busy Coder's Guide to android Development_
    http://commonsware.com/Android
 */

package com.commonsware.android.mapsv2.pager;

import android.content.Context;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.SurfaceView;
import android.view.View;

public class MapAwarePager extends ViewPager 
  public MapAwarePager(Context context, AttributeSet attrs) 
    super(context, attrs);
  

  @Override
  protected boolean canScroll(View v, boolean checkV, int dx, int x,
                              int y) 
    if (v instanceof SurfaceView || v instanceof PagerTabStrip) 
      return(true);
    

    return(super.canScroll(v, checkV, dx, x, y));
  

现在,完全有可能让您的滑动关闭功能在 ViewPager 内工作,但我会从这里开始。

【讨论】:

以上是关于在 ViewPager 中捕获滑动以关闭列表视图手势的主要内容,如果未能解决你的问题,请参考以下文章

在 viewpager 中显示列表视图项的上下文菜单

如何在 ViewPager 中实现 Swipe 事件以查看 Flipper?

在 ViewPager 中滑动方向

防止 ViewPager 破坏屏幕外视图

是否可以在viewpager android中只创建一个可滑动的视图

ViewPager2嵌套RecyclerView滑动冲突解决办法