如何在滚动视图中启用拉动刷新?

问题描述 投票:0回答:2
android layout scrollview refresh
2个回答
10
投票

如果我理解你的问题,你想在你的滚动视图中实现拉动刷新。相反,要使用您正在使用的库,我建议您实现 SwipeRefreshLayout https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html 这是一个实现拉动刷新的布局,就像 Google+ 或 Gmail 的应用程序中一样。

这是在 xml 中实现

SwipeRefreshLayout
的示例:

    <?xml version="1.0" encoding="utf-8"?>

    <FrameLayout
        android:layout_width="match_parent" android:layout_height="match_parent"
        xmlns:android="http://schemas.android.com/apk/res/android" >

        <android.support.v4.widget.SwipeRefreshLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/swipe_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

          <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:tools="http://schemas.android.com/tools"
             android:id="@+id/garae_scroll"
             android:layout_width="match_parent"
             android:layout_height="wrap_content" >

         </ScrollView>

       </android.support.v4.widget.SwipeRefreshLayout>
</FrameLayout>

注意

强烈不建议将 Scrollview/Listview 放入 Scrollview/Listview 中。第一个原因与性能有关,Romain Guy 在一个视频中解释了这一点 https://www.youtube.com/watch?v=wDBM6wVEO70


0
投票

您可以使用androidx SwipeRefreshLayout。为此,您首先需要在 gradle 中导入它:

dependencies {
    implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
}

接下来,在 XML 中,用

ScrollView
:
 包装您希望能够滑动刷新的视图(在您的情况下为 
androidx.swiperefreshlayout.widget.SwipeRefreshLayout

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
    android:id="@+id/swipeRefreshLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        ...>
        ...
    </ScrollView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

然后要在代码中设置刷新侦听器,请使用

setOnRefreshListener
。刷新完成后,调用
setRefreshing(false)
,否则刷新循环将永远停留在那里(在下面的示例中,刷新是同步的,在这种情况下,它只会出现在侦听器的末尾)。以 Kotlin 为例:

import androidx.swiperefreshlayout.widget.SwipeRefreshLayout

val swipeRefreshLayout = this.findViewById<SwipeRefreshLayout>(R.id.swipeRefreshLayout)
swipeRefreshLayout.setOnRefreshListener {
    // Insert your code to refresh here

    swipeRefreshLayout.setRefreshing(false)
}
© www.soinside.com 2019 - 2024. All rights reserved.