Ваш случай немного отличается, но я думаю, что концепция примерно такая же.Просто используйте this.getActivity()
в вашем диалоговом классе и передайте его как LifeCycleOwner
.У меня была такая же проблема, потому что я использовал LiveData
, а Retrofit
и LiveData
нужна ссылка.DialogFragment
устанавливает его LifeCycleOwner
в некоторый момент, но это не относится ни к одному из методов, упомянутых выше.Используя getActivity()
, вы можете использовать своего наблюдателя уже в методе onCreateDialog.Вот некоторая часть моего кода, которая вначале вызвала некоторую проблему, когда я попытался передать нулевое значение this.getViewLifecycleOwner()
вместо действия.
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
FragmentActivity activity = this.getActivity();
binding = DialogSelectIssuesBinding.inflate(LayoutInflater.from(getContext()));
RetroRepository.
getDefault().
getAllIssues().
observe(this.getActivity(), listLiveDataResponse -> {
//ToDo Check for errors and Bind the data here
});
AlertDialog alertDialog = new AlertDialog.Builder(activity)
.setView(binding.getRoot())
.setTitle("Please select issues from the list below:")
.setNegativeButton("CANCEL", null)
.setPositiveButton("ADD", null)
.create();
alertDialog.setCanceledOnTouchOutside(false);
return alertDialog;
}