gpt4 book ai didi

android - Fragment 和 DialogFragment 生命周期关系

转载 作者:太空宇宙 更新时间:2023-11-03 10:18:14 33 4
gpt4 key购买 nike

我有 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/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com