。&结合&上下文

0

的问题

我的同事和我发生了争执。 我们的翻译的应用程序。+结合。 有必要开始一个对话从一个片段。 我做这样的:

在该段:

fragmentBinding.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
       // there's a bunch of code here 
     alertDialog.show();
}});

同事还说你需要这样做:

在xml文件,我们写如下:

android:onClick="@{v -> viewModel.showDialog(context)}"

和视图模型:

fun showDialog(context: Context){
     AlertDialog.Builder builder = new AlertDialog.Builder(context);
       // there's a bunch of code here
     alertDialog.show();
}

请告诉我哪一个是正确的?

android binding mvvm
2021-11-21 22:26:10
1

最好的答案

2

视图模型是负责准备数据的用户界面,正如在 安卓开发的导游.

因此,一个最佳做法永远不会是要处理UI元素中的模型. 虽然守则将仍然执行,如果我们通过 Context 该模型,并允许它表明一个 alertDialog你可能还需要注意的活动/片断和视图模型有不同的生命周期,所以你必须要小心在传递 Context 该模型

更明智的方式处理这个问题,将对该模型保持一个标志和准备所需的消息使用 LiveData 或者类似的东西,以便使活动/片段注意到,实际上建立和显示一个 AlertDialog 通过获取消息的模型,并通知的视图模型时的对话已经显示击,这样的模型将处理后的业务逻辑。

为你的特定情况下,我会离开的 AlertDialog 代码在活动/片段,而如果必要我会检索的数据的模型.

2021-11-21 22:45:45

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................