我有以下布局
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
//some views here
</LinearLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stretchColumns="*" >
</TableLayout>
</LinearLayout>
</android.support.v4.widget.SwipeRefreshLayout>
问题是当我向下滚动表格时,我无法再次滚动,因为正在触发swipelayout。只有当表的第一个视图可见时,如何触发swiperefresh?
答案 0 :(得分:63)
我发现如果您将ScrollView
替换为android.support.v4.widget.NestedScrollView
,则滚动行为将按预期运行。
答案 1 :(得分:8)
制作自己的SwipeRefreshLayout实现并以这种方式覆盖canChildScrollUp:
@Override
public boolean canChildScrollUp() {
if (scrollView != null)
return scrollView.canScrollVertically(-1);
return false;
}
只需替换ScrollView的任何子类。
答案 2 :(得分:3)
如果你有这样的布局:
<SwipeRefreshLayout>
<android.support.v4.widget.NestedScrollView
android:id="@+id/your_scroll_view_id">
<LinearLayout>
...
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</SwipeRefreshLayout>
您需要创建自己的类并以这种方式覆盖该函数:
class SwipeRefreshLayoutCustom extends SwipeRefreshLayout {
public SwipeRefreshLayoutCustom(Context context, AttributeSet attributes) {
super(context, attributes)
}
@override
boolean canChildScrollUp() {
return your_scroll_view_id.scrollY != 0
}
}