手动拉入 PullToRefresh 不起作用(使用可复制示例)

Mik*_*elT 2 android kotlin pull-to-refresh android-jetpack-compose

我试图从材质库中实现 PullToRefresh 组件,但即使一对一复制 Google 自己的代码,滑动也不会触发任何内容。https://developer.android.com/reference/kotlin/androidx/compose/material/pullrefresh/package-summary.html

我已经能够将他们的代码减少到最小的可复制示例。加载器将显示您是否手动将其设置为 true,但不会在滑动时触发。

该视图不需要任何其他内容,例如,无论 Box 组件中还有什么内容,加载程序都应该显示。

import androidx.compose.foundation.layout.*
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material.pullrefresh.PullRefreshIndicator
import androidx.compose.material.pullrefresh.pullRefresh
import androidx.compose.material.pullrefresh.rememberPullRefreshState
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview

@OptIn(ExperimentalMaterialApi::class)
@Composable
fun PullToRefreshComposableTEST() {

    var loading by remember {
        mutableStateOf(true)
    }

    val pullRefreshState = rememberPullRefreshState(
        refreshing = loading,
        onRefresh = {
            loading = true
        })

    Box(
        Modifier.fillMaxSize().pullRefresh(pullRefreshState)
    ) {
        PullRefreshIndicator(
            modifier = Modifier.align(Alignment.TopCenter),
            refreshing = loading,
            state = pullRefreshState
        )
    }
}

@Preview(showSystemUi = true)
@Composable
private fun Preview() {
    PullToRefreshComposableTEST()
}
Run Code Online (Sandbox Code Playgroud)

z.g*_*g.y 5

不确定什么不起作用,但基于此

\n
\n

加载器将显示您是否手动将其设置为 true,但不会在滑动时触发。

\n
\n

我假设PullRefresh当您尝试将其拉下时不会显示。

\n

根据文档

\n
\n

\xe2\x80\xa6 内容需要“可垂直滚动”,以便 SwipeRefresh()\n 能够对滑动手势做出反应。LazyColumn 等布局可自动垂直滚动,而 Column 或 LazyRow 等其他布局则不能自动垂直滚动。在这些情况下,您可以提供\nModifier.verticalScroll 修饰符\xe2\x80\xa6

\n
\n

只需添加一个垂直滚动到你的,Box这样你就可以把它拉下来

\n

您修改后的代码:

\n
@OptIn(ExperimentalMaterialApi::class)\n@Composable\nfun PullToRefreshComposableTEST() {\n\n    var loading by remember {\n        mutableStateOf(false)\n    }\n\n    val pullRefreshState = rememberPullRefreshState(\n        refreshing = loading,\n        onRefresh = {\n            loading = !loading\n        })\n\n    Box(\n        Modifier\n            .fillMaxSize()\n            .pullRefresh(pullRefreshState)\n            .verticalScroll(rememberScrollState())\n    ) {\n        PullRefreshIndicator(\n            modifier = Modifier.align(Alignment.TopCenter),\n            refreshing = loading,\n            state = pullRefreshState\n        )\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

在此输入图像描述

\n