Prevent dialog crash

pull/178/head
M66B 5 years ago
parent b45bf99363
commit e7f89ebe48

@ -42,6 +42,8 @@ public class FragmentDialogBase extends DialogFragment {
private boolean once = false; private boolean once = false;
private LifecycleOwner owner; private LifecycleOwner owner;
private LifecycleRegistry registry; private LifecycleRegistry registry;
private Fragment targetFragment;
private int targetRequestCode;
@Override @Override
public void onCreate(@Nullable Bundle savedInstanceState) { public void onCreate(@Nullable Bundle savedInstanceState) {
@ -131,14 +133,15 @@ public class FragmentDialogBase extends DialogFragment {
@Override @Override
public void setTargetFragment(@Nullable Fragment fragment, int requestCode) { public void setTargetFragment(@Nullable Fragment fragment, int requestCode) {
super.setTargetFragment(fragment, requestCode); targetFragment = fragment;
Log.i("Set target " + this + " " + fragment); targetRequestCode = requestCode;
Log.i("Set target " + this + " " + fragment + " request=" + requestCode);
fragment.getViewLifecycleOwner().getLifecycle().addObserver(new LifecycleObserver() { fragment.getViewLifecycleOwner().getLifecycle().addObserver(new LifecycleObserver() {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroy() { public void onDestroy() {
Log.i("Reset target " + FragmentDialogBase.this); Log.i("Reset target " + FragmentDialogBase.this);
FragmentDialogBase.super.setTargetFragment(null, requestCode); targetFragment = null;
} }
}); });
} }
@ -146,12 +149,11 @@ public class FragmentDialogBase extends DialogFragment {
protected void sendResult(int result) { protected void sendResult(int result) {
if (!once) { if (!once) {
once = true; once = true;
Fragment target = getTargetFragment(); Log.i("Dialog target=" + targetFragment + " result=" + result);
Log.i("Dialog target=" + target + " result=" + result); if (targetFragment != null) {
if (target != null) {
Intent data = new Intent(); Intent data = new Intent();
data.putExtra("args", getArguments()); data.putExtra("args", getArguments());
target.onActivityResult(getTargetRequestCode(), result, data); targetFragment.onActivityResult(targetRequestCode, result, data);
} }
} }
} }

Loading…
Cancel
Save