android - Fragment 和 DialogFragment 生命周期关系

标签 android android-fragments android-dialogfragment android-lifecycle

我有 Fragment “A”,其中有一个 ImageButton。单击此按钮后,DialogFragment“B”被调用到前台,其中 Fragment“A”在后台部分可见。 DialogFragment “B”向用户呈现一个选项列表。单击特定选项后,DialogFragment“B”通过 Dismiss() 消失,Fragment“A”再次完全可见。

在此操作期间,我需要更新 Fragment“A”上的 ImageButton 以表示用户在 DialogFragment“B”上所做的选择(基本上是 ImageButton 的新图像)。

我认为在 OnResume 期间更新 fragment “A”上的 ImageButton 的正确位置是否正确?在显示 FragmentDialog“B”时, fragment “A”是否进入 OnPause?因此,从 DialogFragment“B”返回时,Fragment“A”将触发其 OnResume,这就是我应该对 ImageButton 呈现给用户?

我希望我的解释是清楚的。非常感谢任何有关我应该在何处以及如何更新 ImageButton 的详细帮助。

最佳答案

随着 ViewModels 和 LiveData 的加入,解决这个问题变得更加容易。创建两个 fragment 都引用的 viewModel。将下一行放在 fragment 的 OnCreate 中。也可以在dialogfragment的onCreateDialog中。

myViewModel = ViewModelProviders.of(getActivity()).get(MyViewModel.class);

当对话框关闭时,调用 myViewModel 上的方法,更新 LiveData 变量:

dialogBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            myViewModel.setButtonPressed(PositiveButtonPressed);
        }
    });
    dialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            myViewModel.setButtonPressed(NegativeButtonPressed)
        }
    });

在 viewModel 中,该方法将 MutuableLiveData 变量设置为要显示的图像。

void SetButtonPressed(int buttonPressed){
   if (buttonPressed==positiveButtonPressed){
       imageToBeShown.setValue(image A);
   }
   else{
      imageToBeShown.setValue(image B);
   }
}

在 onActivityCreated 中将观察者设置为 LiveData 变量:

myViewModel.imageToBeShown().observe(getViewLifecycleOwner(), new Observer<Image>() {
        @Override
        public void onChanged(@Nullable Image image) {
            button.setBackground(image);
            }
        }
    });

当然,您可以实现一个 getter 方法并将 MutuableLiveData 变量保密。然后观察者只观察 getter 方法。

关于android - Fragment 和 DialogFragment 生命周期关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31454223/

相关文章:

android - 使用 DialogFragment 时如何连接到后退事件?

android - 如何更改 snackbar 的背景颜色?

android - 从 Android 启动 Unity 时无法找到 main(错误)

android - 我可以在 Google Play 的 Android 应用中使用 PayPal 捐款按钮吗?

android - Google Play 开发者控制台崩溃报告

android - GridView 无法显示图像

java - 使用标签在同一 Activity 的 fragment 之间传输多个字符串

java - fragment 中的 findFragmentById 不起作用

java - fragment 上的 MapFragment

java - 调用 Setter 方法时自定义对话框 fragment 崩溃