Heim >Java >Die LazyColumn-Referenz gibt die Startposition zurück

Die LazyColumn-Referenz gibt die Startposition zurück

WBOY
WBOYnach vorne
2024-02-10 09:27:07837Durchsuche

PHP-Editor Baicao stellt Ihnen heute eine sehr praktische Funktion vor – die LazyColumn-Referenz, um zur Ausgangsposition zurückzukehren. Während des Entwicklungsprozesses müssen wir häufig eine vertikale Bildlaufliste erstellen, und dafür wurde LazyColumn geboren. Es kann bei Bedarf dynamisch Listenelemente generieren und so die Anwendungsleistung und -effizienz erheblich verbessern. Gleichzeitig kann LazyColumn auch die Startposition der Liste zurückgeben, was uns die Bedienung und Verarbeitung der angegebenen Position erleichtert. Egal, ob Sie mobile Anwendungen oder Webanwendungen entwickeln, LazyColumn ist ein sehr praktisches Tool, werfen wir einen Blick darauf!

Frageninhalt

Ich habe eine Bewerbung. Ein großes Bild und eine Lazycolumn unten. Wenn ich zum vierten (oder fünften) Link und dann zurück gehe, landet meine Lazycolumn an ​​der Anfangsposition. Link 1 befindet sich oben. Wenn ich Link 4 wieder will, muss ich „drehen“.

Die Schaltfläche „Zurück“ in der Navigationsleiste „Nativ“ ist anders. Als ich zurückkam, erwartete mich lazycolumn bereits in der Form, die ich zurückgelassen hatte.

Was muss im Programm getan werden, damit sich die obere Schaltfläche genauso verhält wie die „Zurück“-Schaltfläche in der Navigationsleiste?

Das ist meine Datei:

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) })
     }
 }

Bildschirm

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)
             )
         }
     }
 }

Ich habe es versucht und gesucht, aber nichts gefunden...

Problemumgehung

Versuchen Sie, Ihren Code wie folgt zu ändern:

navGraphBuilder.composable(route = Screens.Screens4.route) {
    Screen4 (navigateContentsScreen = { navController.navigateUp() })
}

Wenn Sie navcontroller.navigate(screens.contents.route) 时,您将始终为该路由创建一个新的 backstackentry verwenden, wird dieses neue Ziel ohne Status frisch erstellt. Seien Sie vorsichtig, Sie werden mit Ihrem aktuellen Ansatz einen riesigen Backstack aufbauen.

Mit navcontroller.navigateup()navcontroller.popbackstack() erhalten Sie das tatsächliche bisherige Ziel. Eine Erklärung der Unterschiede finden Sie in diesem Stackoverflow-Beitrag.

Das obige ist der detaillierte Inhalt vonDie LazyColumn-Referenz gibt die Startposition zurück. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen