当前位置: 首页 > 知识库问答 >
问题:

如何在jetpack compose中用BottomBar实现底部表单

夏弘文
2023-03-14

因此,我试图实现的是:

  • 托管BottomNav Bar的家庭组合(此处使用脚手架)
  • 底部导航栏与其他3个组合附加
  • 3个组合中的每一个都有自己的惰性列
  • 3个延迟列中的每个项目都有一个菜单图标,单击该图标会打开底部工作表

我能够通过将脚手架包含在一个ModalBottonSheetLayout中来实现以上目标,这是借助于这里的答案:Jetpack Compose Scaffold Modal Bottom Sheet Sheet

问题:

  • 底部工作表的目的是显示一个菜单项,当单击该菜单项时,应将该项从lazyCol列中删除
  • 所以底部工作表需要知道单击删除它的项目的详细信息

我怎样才能做到这一点?home composable没有任何关于它所托管的composable中存在的惰性列内的项目的信息。

有没有其他方法来解决这个问题?

这是我的代码:

HomeComposable.kt

fun HomeComposable(homeViewModel: HomeViewModel, 
     navController: NavHostController) {
        ModalBottomSheetLayout(
           sheetContent = {
           //get the id of the message here so it can be     
           //deleted
               Button(
                   text = "delete Message")
                   onClick = deleteMessage(message.id
               )
           }
) {
    Scaffold(
    content = {
    NavHost(navController = navController, startDestination = 
    WHATS_NEW_COMPOSABLE) {

          composable(MESSAGES_COMPOSABLE) {
            MessageItemsComposable(
                homeViewModel,
                navController,
                bottomSheetState
            )
          }
 
    }
  }  
)

MessageItemsComposable.kt

val messages : List<Messages> = getMessagesFromNetwork()

LazyColumn {
    items(messages) { message ->
    Row{
        Text(message.title)
        Icon(
            onClick = {
             bottomState.show()
             //show a bottom sheet with an option to delete                 
            }
        ) {

           //Draw the icon
           }
        }            
    }
}

共有1个答案

甘永春
2023-03-14

在这种情况下,我会使用带有StateFlow的存储库。这个存储库将是一个单独的存储库,它负责维护数据和删除数据。您的可组合列表将监听状态变化,您的bottomsheet将调用delete()来删除选定的元素。

class Repository<T> {
    private val _state = MutableStateFlow<T>(initialState)
    val state: StateFlow<T> = _state

    fun delete(data: T) {
        _state.remove(data)
    }
}

可组合列表的父级应提供回调。当用户单击列表项并将该项作为参数传递时,应调用此回调。

@Composable
fun DataList(onItemClick(item: T)) {
    // list implementation with onItemCkick as onClick callback
}

调用时,您可以打开底部工作表并将项目传递给它。

 类似资料:
  • 本文向大家介绍Android如何实现底部菜单固定到底部,包括了Android如何实现底部菜单固定到底部的使用技巧和注意事项,需要的朋友参考一下 今天搞了很久的一个问题,导航菜单没有固定到底部,因为上面是ListView,可是没内容,于是就浮动上去了。 效果如下: 这里采用的是一个碎片,代码是: 出问题了,百度了很多,试了很多的办法,没用。 主页面代码: 最后发现是这段代码惹的麻烦:android:

  • 有人知道如何实现如下所示的弹出窗口吗?它从底部滑入,并支持具有丰富选项的自定义UI。关于控制是什么以及我们如何实施它有什么想法吗?

  • 本文向大家介绍Flutter实现底部导航,包括了Flutter实现底部导航的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Flutter实现底部导航的具体代码,供大家参考,具体内容如下 BottomNavigationBar使用 底部导航栏 主文件 main.dart (注意导入文件路径) 底部包含三个导航按钮,分别对应三个界面: firstPage.dart secondPage.

  • 我有一个具有以下4种布局的项目: 实际上,我有一个活动,其中包含一个底部的应用程序栏和一个NavHostFragment,在那里注入片段。主要片段是主视图。有一个管理和一个设置片段,它们都是与主视图类似的顶级视图,但并不相互依赖。这3个片段可以通过单击导航抽屉中的项目进行切换。为了简化,我正在尝试新的导航架构组件。 现在我有一些设计问题: 我是否应该将底部的应用程序栏移动到片段中,因为它们彼此不依

  • uniapp写小程序如何就是让它自动滚动到底部呢? 尝试了好多办法 还是不太行 用的是 <scroll-view></scroll-view> 组件

  • 本文向大家介绍Flutter实现底部菜单导航,包括了Flutter实现底部菜单导航的使用技巧和注意事项,需要的朋友参考一下 简介 现在我们的 APP 上面都会在屏幕下方有一排的按钮,点击不同的按钮可以进入不同的界面。就是说在界面的底部会有一排的按钮导航。可看下面的图示。 完成图示 程序工程目录 梳理下实现步骤 我们需要实现这个底部菜单导航,就需要有底部菜单的那一排图标按钮。图标按钮是固定在一个工具