拉动刷新/滑动刷新仅适用于惰性列/行 - Jetpack compose

问题描述 投票:0回答:1

我正在做项目,出现了这个问题。

在主屏幕中,我有一些元素(某些行占据屏幕的 60%)。然后是一个懒惰的专栏。 我尝试过“拉动刷新”/“滑动刷新”,但在 60% 的屏幕上不起作用,只监听“惰性”项目上的滑动行为。 有什么解决办法吗? 参考:


  val pullRefreshState = rememberPullRefreshState(
        refreshing = isLoading,
        onRefresh = viewModel::getAllAssetsValue
    )

    Box(
        modifier = modifier
            .fillMaxSize()
            .pullRefresh(pullRefreshState)
    ) {

     // Rows and Columns 

       .................
        
            PullRefreshIndicator(
                refreshing = isLoading,
                state = pullRefreshState,
                modifier = Modifier.align(Alignment.TopCenter)
            )
 
   }
         
android-jetpack-compose android-jetpack pull-to-refresh android-jetpack-compose-material3 jetpack-compose-swipe-to-dismiss
1个回答
0
投票

您可以通过将

Modifier.verticalScroll(rememberScrollState())
应用于除 LazyColumn 之外的其他可组合项来解决此问题。

请看下面的例子:

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SimpleInversePullRefresh() {

    var isLoading by remember { mutableStateOf(false) }
    val pullToRefreshState = rememberPullToRefreshState()

    LaunchedEffect(isLoading) {
        if (isLoading) {
            delay(1000)
            isLoading = false
        }
    }

    PullToRefreshBox(
        modifier = Modifier.fillMaxSize(),
        state = pullToRefreshState,
        isRefreshing = isLoading,
        onRefresh = { isLoading = true }
    ) {
        Column(
            modifier = Modifier
                .fillMaxSize()
                .verticalScroll(rememberScrollState())
        ) {
            Column(
                modifier = Modifier
            ) {
                repeat(15) {
                    Text("non-scrollable content")
                }
            }
            LazyColumn(
                modifier = Modifier.weight(1f)
            ) {
                items(50) {
                    Text(
                        modifier = Modifier.fillMaxWidth(),
                        text = "ITEM $it"
                    )
                }
            }
        }
    }
}

输出:

Screen recording

注意

当您在不可滚动内容顶部开始滑动时,刷新指示器将始终出现,但在

LazyColumn
上滑动时,仅当
LazyColumn
滚动到顶部时才会出现。

© www.soinside.com 2019 - 2024. All rights reserved.