在 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()
。如果提供的View
是ListView
,则返回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 中实现 Swipe 事件以查看 Flipper?