小编Noa*_*oam的帖子

如何使用 navGraph 范围初始化 viewModel

我开始学习共享视图模型。目前我在活动中有 3 个片段,其中 2 个在嵌套的 navGraph 中。

我想为它们创建共享的 navGraph viewModel 范围,但我无法理解如何以及在哪里可以在这些片段中初始化视图模型。

在我过去的所有应用程序中,我创建了全局视图模型

private lateinit var viewModel: MainViewModel
Run Code Online (Sandbox Code Playgroud)

然后在里面onCreateView我像这样初始化 viewModel -

viewModel = ViewModelProvider(this, Factory(requireActivity().application)).get(
   MainViewModel::class.java)
Run Code Online (Sandbox Code Playgroud)

如果我想与 2 个片段共享一个视图模型,我如何对 navGraph viewModel 范围执行相同的操作?

目前我有这种方法:

private val homeViewModel: HomeViewModel by navGraphViewModels(R.id.nested_navigation)
Run Code Online (Sandbox Code Playgroud)

这是工作,但是

A.我从来没有在全局变量中看到过 viewModel

B.我不能用这种方法在工厂内部传递变量

android mvvm kotlin android-viewmodel android-jetpack

5
推荐指数
1
解决办法
1033
查看次数

如何为列表内的容器设置动画

我有一个容器列表,我想为容器设置动画。

比如改变他的高度/宽度,改变容器的内容。

到目前为止我所做的是:

containerHeight =  MediaQuery.of(context).size.height * 0.20;
body: Container(
            child: ListView.builder(
              itemCount: data.length,
              itemBuilder: (BuildContext context, int index) {
                return Padding(
          padding: const EdgeInsets.all(15.0),
          child: Container(
            color: Colors.black,
            height: containerHeight,
            child: IconButton(
              icon: Icon(Icons.list),
              color: Colors.white,
              onPressed: () {
                setState(() {
                 containerHeight =  MediaQuery.of(context).size.height * 0.35;
                });
              },
            ),
          ),
        );
              },
            ),
Run Code Online (Sandbox Code Playgroud)

我打算使用AnimatedContainer,但即使在使用它之前,如果我按下按钮什么也没有发生

dart flutter flutter-layout flutter-animation

4
推荐指数
1
解决办法
1578
查看次数

如何仅从DateTime.now()中提取时间;

我有这个变量来提取时间 DateTime.now();

DateTime date = DateTime.now();
String time = "${date.hour}:${date.minute}:${date.second}";
Run Code Online (Sandbox Code Playgroud)

问题是,如果时间例如是01:09:32,我得到的时间是1:9:32。

如何获得常规格式的时间?

我可以使用if-else做到这一点,但是我敢肯定有更好的方法

dart flutter

3
推荐指数
1
解决办法
105
查看次数

如何正确处理Android开发中的View State

目前我在我的应用程序中有这种方法:

ViewState(每个屏幕一个视图状态)

sealed class CategoriesViewState {
    object Loading : CategoriesViewState()

    data class Error(
        val errorMessage: String,
        val messageType: UIComponentType
    ) : CategoriesViewState()

    data class CategoryList(
        val categories: List<Category>
    ) : CategoriesViewState()
}
Run Code Online (Sandbox Code Playgroud)

我使用实时数据在我的片段/活动中观察这种状态:

  viewModel.viewState.observe(viewLifecycleOwner, Observer {
            when (it) {
                is CategoriesViewState.Loading -> {
                progress_bar.visibility = View.VISIBLE

                    Log.d(TAG, "LOADING")
                }

                is CategoriesViewState.Error -> {
                progress_bar.visibility = View.GONE

                    Log.d(TAG, "ERROR")

                }

                is CategoriesViewState.CategoryList -> {
                progress_bar.visibility = View.GONE

                    Log.d(TAG, "DATA")

                }
            }
        })
Run Code Online (Sandbox Code Playgroud)

它工作正常。

在我看来,随着应用程序的增长,效率很低。

假设我的应用程序中有 20 个屏幕:我需要 20 个视图状态,我需要在每个屏幕中编写相同的 …

android mvvm kotlin android-livedata android-architecture-components

0
推荐指数
1
解决办法
699
查看次数