dei*_*988 54 android android-dialogfragment
我正在使用一个DialogFragment,我从这样一个显示Activity:
DialogFragmentImage dialog = DialogFragmentImage.newInstance(createBitmap());
dialog.onDismiss(dialog);.onDismiss(this);
dialog.show(getFragmentManager(), "DialogFragmentImage");
Run Code Online (Sandbox Code Playgroud)
我想检查何时DialogFragment被解雇(例如当按下后退按钮时),但在我的Activity.我怎样才能做到这一点?我怎么能"告诉"我activity的DialogFragment已被解雇?
Yar*_*lyk 89
让您的活动实施 OnDismissListener
public final class YourActivity extends Activity implements DialogInterface.OnDismissListener {
@Override
public void onDismiss(final DialogInterface dialog) {
//Fragment dialog had been dismissed
}
}
Run Code Online (Sandbox Code Playgroud)
DialogFragment已经实现OnDismissListener,只需覆盖该方法并调用Activity.
public final class DialogFragmentImage extends DialogFragment {
///blah blah
@Override
public void onDismiss(final DialogInterface dialog) {
super.onDismiss(dialog);
final Activity activity = getActivity();
if (activity instanceof DialogInterface.OnDismissListener) {
((DialogInterface.OnDismissListener) activity).onDismiss(dialog);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用childFragment管理器(API> = 17)从片段启动对话框,则可以使用getParentFragment与父片段上的onDismissListener对话:
public final class DialogFragmentImage extends DialogFragment {
///blah blah
@Override
public void onDismiss(final DialogInterface dialog) {
super.onDismiss(dialog);
Fragment parentFragment = getParentFragment();
if (parentFragment instanceof DialogInterface.OnDismissListener) {
((DialogInterface.OnDismissListener) parentFragment).onDismiss(dialog);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Boo*_*tak 20
这是我的答案.这有点晚了,但也许有人会路过.
FragmentManager fm = getFragmentManager();
YourDialogFragment dialog = new YourDialogFragment();
dialog.show(fm,"MyDialog");
fm.executePendingTransactions();
dialog.getDialog().setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialogInterface) {
//do whatever you want when dialog is dismissed
}
});
Run Code Online (Sandbox Code Playgroud)
我们需要打电话
fm.executePendingTransactions();
Run Code Online (Sandbox Code Playgroud)
确保已执行FragmentTransaction工作.否则NullPointerException可以在通话时发生setOnDismissListener().
对不起,如果有任何错误.希望这有帮助.
这是一个老问题,但是我找不到满意的解决方案。我不喜欢将任何侦听器传递给我的DialogFragment或设置TargetFragment,因为这可能会在方向更改时中断。你怎么看待这件事?
MyDialog d = new MyDialog();
d.show(fragmentManager, "tag");
fragmentManager.registerFragmentLifecycleCallbacks(new FragmentManager.FragmentLifecycleCallbacks() {
@Override
public void onFragmentViewDestroyed(FragmentManager fm, Fragment f) {
super.onFragmentViewDestroyed(fm, f);
//do sth
fragmentManager.unregisterFragmentLifecycleCallbacks(this);
}
}, false);
Run Code Online (Sandbox Code Playgroud)
替代答案,如果您无权访问 onDismiss of 活动的方法。
//DIALOGFRAGMENT
//Create interface in your DialogFragment (or a new file)
public interface OnDismissListener {
void onDismiss(MyDialogFragment myDialogFragment);
}
//create Pointer and setter to it
private OnDismissListener onDismissListener;
public void setDissmissListener(DissmissListener dissmissListener) {
this.dissmissListener = dissmissListener;
}
//Call it on the dialogFragment onDissmiss
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
if (onDismissListener != null) {
onDismissListener.onDismiss(this);
}
}
//OTHER CLASS, start fragment where you want
MyDialogFragment df = new MyDialogFragment();
df.setOnDismissListener(new MyDialogFragment.OnDismissListener() {
@Override
public void onDismiss(MyDialogFragment myDialogFragment) {
//Call when MyDialogFragment close
}
});
df.show(activity.getFragmentManager(), "myDialogFragment");
Run Code Online (Sandbox Code Playgroud)
编辑:如果系统需要重新创建DialogFragment:你可以找到它
MyDialogFragment myDialogFragment = getFragmentManager().findFragmentByTag("MyDialogFragment");
if(myDialogFragment != null) {
myDialogFragment.setOnDismissListener(...);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47664 次 |
| 最近记录: |