LazyColumn 引用返回起始位置
php小編草今天為大家介紹一款非常實用的功能-LazyColumn 引用回到起始位置。在開發過程中,我們經常需要建立一個垂直滾動列表,而LazyColumn正是為此而生。它可以根據需要動態產生列表項,大大提高了應用程式的效能和效率。同時,LazyColumn還可以回到清單的起始位置,方便我們進行指定位置的操作和處理。無論是開發行動應用程式還是網頁應用,LazyColumn都是一個非常實用的工具,讓我們一起來了解一下吧!
問題內容
我有一個申請。一張大圖片和底部的lazycolumn。當我轉到第四個(或第五個)連結然後返回時,我的 lazycolumn 最終位於初始位置。連結1在最上面。當我再次想要連結 4 時,我必須「扭轉」。
「本機」導覽列上的「後退」按鈕有所不同。當我回來時,lazycolumn 已經以我留下的形式在等著我。
程式中需要做什麼才能使頂部按鈕的行為與導覽列上的「後退」按鈕相同?
這是我的文件:
navgraph.kt
#@composable fun navgraph(navcontroller: navhostcontroller){ navhost(navcontroller = navcontroller, startdestination = screens.contents.route ) { addcontentsscreen(navcontroller, this) addscreen1(navcontroller, this) addscreen2(navcontroller, this) addscreen3(navcontroller, this) addscreen4(navcontroller, this) addscreen5(navcontroller, this) } } private fun addcontentsscreen( navcontroller: navhostcontroller, navgraphbuilder: navgraphbuilder ) { navgraphbuilder.composable(route = screens.contents.route) { contentsscreen( navigatescreen1 = { navcontroller.navigate(screens.screens1.route) }, navigatescreen2 = { navcontroller.navigate(screens.screens2.route) }, navigatescreen3 = { navcontroller.navigate(screens.screens3.route) }, navigatescreen4 = { navcontroller.navigate(screens.screens4.route) }, navigatescreen5 = { navcontroller.navigate(screens.screens5.route) }, ) } } private fun addscreen1(navcontroller: navhostcontroller, navgraphbuilder: navgraphbuilder) { navgraphbuilder.composable(route = screens.screens1.route) { screen1 (navigatecontentsscreen = { navcontroller.navigate(screens.contents.route) }) } } private fun addscreen2(navcontroller: navhostcontroller, navgraphbuilder: navgraphbuilder) { navgraphbuilder.composable(route = screens.screens2.route) { screen2 (navigatecontentsscreen = { navcontroller.navigate(screens.contents.route) }) } } private fun addscreen3(navcontroller: navhostcontroller, navgraphbuilder: navgraphbuilder) { navgraphbuilder.composable(route = screens.screens3.route) { screen3 (navigatecontentsscreen = { navcontroller.navigate(screens.contents.route) }) } } private fun addscreen4(navcontroller: navhostcontroller, navgraphbuilder: navgraphbuilder) { navgraphbuilder.composable(route = screens.screens4.route) { screen4 (navigatecontentsscreen = { navcontroller.navigate(screens.contents.route) }) } } private fun addscreen5(navcontroller: navhostcontroller, navgraphbuilder: navgraphbuilder) { navgraphbuilder.composable(route = screens.screens5.route) { screen5 (navigatecontentsscreen = { navcontroller.navigate(screens.contents.route) }) } }
螢幕
sealed class screens(val route: string) { data object contents : screens("contents_screen") data object screens1 : screens("screen_1"); data object screens2 : screens("screen_2"); data object screens3 : screens("screen_3") data object screens4 : screens("screen_4"); data object screens5 : screens("screen_5"); }
screens.kt
#class item(val link: () -> unit, val name: string) @composable fun contentslist(explanation: list<item>) { val liststate = rememberlazyliststate() lazycolumn(state = liststate) { items(explanation.size) { index -> val item = explanation[index] contentsbutton( onclick = item.link, text = item.name ) } } } @composable fun contentsscreen( navigatescreen1: () -> unit, navigatescreen2: () -> unit, navigatescreen3: () -> unit, navigatescreen4: () -> unit, navigatescreen5: () -> unit, ) { val listofquestions = listof( item( navigatescreen1, "screen1"), item( navigatescreen2, "screen2"), item( navigatescreen3, "screen3"), item( navigatescreen4, "screen4"), item( navigatescreen5, "screen5"), ) column { image( modifier = modifier.height(650.dp), painter = painterresource(id = r.drawable.cat), contentdescription = null, contentscale = contentscale.crop ) contentslist(listofquestions) } }
screen4.kt
@OptIn(ExperimentalMaterial3Api::class) @Composable fun Screen4( navigateContentsScreen: () -> Unit, ) { val text = "Screen4" Scaffold( containerColor = lightGray, contentColor = darkGrey, topBar = { TopAppBar( modifier = Modifier.height(80.dp), title = { Box( Modifier.fillMaxHeight(), contentAlignment = Alignment.Center ) { Text( maxLines = 1, overflow = TextOverflow.Ellipsis, text = text, color = orange, ) } }, navigationIcon = { Box( Modifier.fillMaxHeight(), contentAlignment = Alignment.Center ) { IconButton( onClick = navigateContentsScreen ) { Icon( imageVector = Icons.Filled.ArrowBack, contentDescription = "Back", tint=orange, ) } } }, colors = TopAppBarDefaults.mediumTopAppBarColors( containerColor = darkGrey ) ) } ) { contentPadding -> Column( modifier = Modifier .fillMaxSize() .padding(contentPadding) .verticalScroll(rememberScrollState()), ) { Text( text = "Screen4", color = darkGrey, textAlign = TextAlign.Justify, modifier = Modifier.padding(24.dp) ) } } }
我嘗試並蒐索,但一無所獲......
解決方法
嘗試按如下方式更改您的程式碼:
navGraphBuilder.composable(route = Screens.Screens4.route) { Screen4 (navigateContentsScreen = { navController.navigateUp() }) }
當您使用navcontroller.navigate(screens.contents.route)
時,您將始終為該路由創建一個新的backstackentry
,並且這個新目的地將是全新創建的,沒有任何狀態。請小心,您將使用目前的方法建立一個巨大的後台堆疊。
使用 navcontroller.navigateup()
或 navcontroller.popbackstack()
,您將獲得實際的先前目的地。請參閱此 stackoverflow 帖子以了解差異的說明。
以上是LazyColumn 引用返回起始位置的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

是的,H5頁面製作是前端開發的重要實現方式,涉及HTML、CSS和JavaScript等核心技術。開發者通過巧妙結合這些技術,例如使用<canvas>標籤繪製圖形或使用JavaScript控制交互行為,構建出動態且功能強大的H5頁面。

如何使用JavaScript或CSS控制瀏覽器打印設置中的頁首和頁尾在瀏覽器的打印設置中,有一個選項可以控制是否顯�...

關於inline-block元素錯位顯示的原因及解決方案在編寫網頁佈局時,我們常常會遇到一些看似奇怪的顯示問題。比...

如何實現分段器的45度曲線效果?在實現分段器的過程中,如何讓點擊左側按鈕時右側邊框變成45度曲線,而點�...

CSS自定義resize符號的方法與背景色統一在日常開發中,我們經常會遇到需要自定義用戶界面細節的情況,比如調...

實時比特幣美元價格 影響比特幣價格的因素 預測比特幣未來價格的指標 以下是 2018-2024 年比特幣價格的一些關鍵信息: