我在Android上有一个自定义对话框,在onCreateView方法中创建了对话框视图。
public class FiltroDialog extends DialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
当我尝试关闭对话框时,我有一个在对话框内通过onClick监听器调用的方法。
boton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG,"doDismiss");
FiltroDialog.this.dismiss();
}
});
我已经重写了对话框的几个onMethod方法,以便查看对话框发生了什么。
@Override
public void onDestroyView() {
super.onDestroyView();
Log.d(TAG, "onDestroyView");
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
Log.d(TAG, "onAttach");
}
@Override
public void onDetach() {
super.onDetach();
Log.d(TAG, "onDetach");
}
@Override
public void onStart() {
super.onStart();
Log.d(TAG, "onStart");
}
@Override
public void onStop() {
super.onStop();
Log.d(TAG, "onStop");
}
@Override
public void onCancel(DialogInterface dialog) {
super.onCancel(dialog);
Log.d(TAG,"onCancel");
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
Log.d(TAG,"onDismiss");
}
我尝试使用 FragmentTransaction 中的 dismiss(); dismissAllowingStateLoss(); 关闭对话框,但每次都得到相同的结果。
D/FiltroDialog(30492): doDismiss
D/FiltroDialog(30492): onStop
D/FiltroDialog(30492): onDestroyView
D/FiltroDialog(30492): onDetach
但是对话框没有从屏幕上消失,使用返回按钮可以正确地使对话框消失,但是使用 dismiss() 或 FragmentTransaction.remove 方法只能到达 Stop、DestroyView 和 Detach,而无法进入 onDismiss()。
当我再次单击按钮时,只有这个在 LogCat 中显示:
D/FiltroDialog(30492): doDismiss
我尝试了几种方法来关闭对话框。以下是我在活动中使用的代码来显示对话框(也尝试过从片段中显示)。
FiltroDialog newFragment = FiltroDialog.newInstance();
newFragment.show(getSupportFragmentManager(), TAG_DLG_FILTROS);
以下是尝试从活动中关闭对话框的代码(同样在片段中尝试,结果相同):
DialogFragment prev = (DialogFragment) getSupportFragmentManager().findFragmentByTag(TAG_DLG_FILTROS);
if (prev != null) {
prev.dismiss();
}
这里是另一次尝试从活动中关闭的尝试(也尝试了从片段中关闭,结果相同)
Fragment prev = getSupportFragmentManager().findFragmentByTag(TAG_DLG_FILTROS);
if (prev != null) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.remove(prev);
ft.commit();
}
这里又尝试关闭对话框,并且在DialogFragment中调用对话框的cancel()方法。
boton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG,"doDismiss");
FiltroDialog.this.getDialog().cancel();
}
});
不要关闭对话框,也不要调用onDismiss、Stop、DestroyView和Detach方法。
以下是另一种尝试通过在DialogFragment中调用对话框的dismiss()方法来关闭对话框的方法。
boton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG,"doDismiss");
FiltroDialog.this.getDialog().dismiss();
}
});
这个问题是由于在应用中的对话框没有被正确处理导致的。具体来说,它既没有调用onDismiss方法,也没有停止、销毁视图或分离方法。
我在应用中有一些对话框,以前从未遇到过这个问题。虽然我不是完全的Android编程新手,但我不知道我做错了什么。这是兼容库中的一个bug吗?