如何在 Python 移动应用程序中与 Android 按钮交互

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

我正在为 Android 创建一个移动应用程序。该应用程序有许多页面和一个导航系统。但是,如果您转到某些页面并单击系统后退按钮,则您返回的不是上一页,而是返回到起始页。应用程序有自己的应用程序栏,可以正常工作,但如何使用 Android 系统后退按钮修复此问题? 我使用 Flet 框架在 Python 中编写代码。

将 flet 导入为 ft

从机队导入( 页, 容器, 排, 图标, 图标, 文本, 高架按钮, 看法, 应用栏, 图标按钮, 分频器, )

应用程序1类:

def main(page: Page):
    

    page.title = "App1"


    def route_change(route):
     page.views.clear()
     page.views.append(
            View(
                "/",
                [   
                    Text(value="Application", font_family="Calibri", size=54,),
                    Divider(color="blue", height=100),
                    ElevatedButton("Start", on_click=lambda _: page.go("/main_menu")),    
                ],
                bgcolor="blue",
                horizontal_alignment="center",
                padding=90
                
            )
        )
     
     if page.route == "/main_menu":
        page.views.append(
           View(
              "/main_menu",
              [
                    AppBar(bgcolor="green"), on_click=lambda _: page.go("/")
                    Text(value="Example1", size=32, font_family="Open Sans", color="black",),
                    Divider(height=50, color="white"),
                    Row(
                        [
                        Container(Icon(name=icons.APPLE), on_click=lambda _: page.go("/section1"),padding=20),
                        Container(Icon(name=icons.MUSIC_NOTE), on_click=lambda _: page.go("/section2"),padding=20)
                        ]
                    ),
              ],
              bgcolor="white"
           )
        )


     if page.route == "/section1":
        page.views.append(
           View(
              "/section1",
              [
                 AppBar(leading=((IconButton(icon=icons.ARROW_BACK, on_click=lambda _: page.go("/main_menu"), icon_color="black"))),
                        bgcolor="green",),
                 Text("Section1")
              ],
           )
        )

     if page.route == "/section2":
        page.views.append(
           View(
              "/section2",
              [
                 AppBar(leading=((IconButton(icon=icons.ARROW_BACK, on_click=lambda _: page.go("/main_menu"), icon_color="black"))),
                        bgcolor="green",),
                 Text("Section2")
              ],
           )
        )



     page.update()

    

    def view_pop(view):
     page.views.pop()
     top_view = page.views[-1]
     page.go(top_view.route)
    

    page.on_route_change = route_change
    page.on_view_pop = view_pop
    page.go(page.route)
    

ft.app(target=main,)

`

python android mobile flet
1个回答
0
投票

只是不要清除route_change上的视图

def route_change(e: ft.RouteChangeEvent):
    # page.views.clear()
    views_handler(page)
    page.update()

def view_pop(e: ft.ViewPopEvent):
    page.views.pop()
    top_view = page.views[-1]
    page.go(top_view.route)
    page.views.pop()

我建议在单独的文件中使用视图处理程序,例如:

import flet as ft
from flet import TemplateRoute

def views_handler(page):
    troute = TemplateRoute(page.route)

    if troute.match("/"):
        if load_token(page):
            page.views.append(
                Home(page, troute.route)
            )
        else:
            page.views.clear() # for clearing the views
            page.views.append(
                Home_external(page, troute.route)
            )
    elif troute.match("/login"):
        page.views.append(
            Login(page, troute.route)
        )
    elif troute.match("/forgotpassword"):
        page.views.append(
            ForgotPassword(page, troute.route)
        )
© www.soinside.com 2019 - 2024. All rights reserved.