我的应用程序当前由ViewPager
组成,其中有几个Fragments
。在一个特定的Fragment
我有一个SwipeRefreshLayout
与ScrollView
和这个容器,一个HorizotalListView类型TwoWayView
。在水平列表视图中滑动时禁用垂直刷卡(SwipeRefreshLayout)
问题是当我在ListView
中水平滑动时,SwipeRefreshLayout
的垂直滚动未被禁用,有时它在操作过程中中断了水平滑动。
这就是我试图做来解决它:
horizListView.setOnTouchListener(new ListView.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
// Disallow ScrollView to intercept touch events.
mSwipeRefreshLayout.requestDisallowInterceptTouchEvent(true);
v.getParent().requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
// Allow ScrollView to intercept touch events.
mSwipeRefreshLayout.requestDisallowInterceptTouchEvent(false);
v.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
// Handle HorizontalScrollView touch events.
v.onTouchEvent(event);
return true;
}
});
这里是我的布局:
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_info1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:textStyle="bold"
android:textSize="@dimen/text_medium"
android:textColor="@color/light_gray"
android:text="@string/place_proposal" />
<org.lucasr.twowayview.TwoWayView
android:orientation="horizontal"
android:id="@+id/horizlistview"
android:layout_height="230dp"
android:scaleType="centerCrop"
android:drawSelectorOnTop="false"
android:layout_width="fill_parent" />
<TextView
android:id="@+id/tv_info2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/light_gray"
android:textSize="@dimen/text_medium"
android:textStyle="bold"
android:padding="10dp"
android:text="@string/actual_position"
android:paddingTop="5dp" />
<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/vf"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<include
android:id="@+id/include_w"
layout="@layout/include_wicard_homescreen" />
<include
android:id="@+id/include_no_w"
layout="@layout/include_no_wicard" />
</ViewFlipper>
</LinearLayout>
</ScrollView>
</android.support.v4.widget.SwipeRefreshLayout>
如果有人可以帮助我,这将是巨大的。
尝试删除'v.onTouchEvent(事件);'并返回false,而不是真正的 – 2014-10-06 14:23:36
我只是尝试它,但它不工作 – 2014-10-06 14:31:36
你应该做一个自定义的swiperefreshlayout,试试这个,[点击这里]( http://stackoverflow.com/questions/23989910/horizontalscrollview-inside-swiperefreshlayout) – 2016-02-23 06:49:12