Android DialogFragment不会被忽略

我在Android中有一个自定义对话框,我在onCreateView方法上创建对话框视图。

public class FiltroDialog extends DialogFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

当我尝试关闭对话框时,我在onClickListener调用的对话框中有一个方法

 boton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.d(TAG,"doDismiss"); FiltroDialog.this.dismiss(); } }); 

我已经覆盖了对话框中的几个onMethods,以查看对话框中发生的事情。

 @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"); } 

我试图用dismiss()关闭对话框; dismissAllowingStateLoss(); 使用FragmentTransaction并且每次我都有相同的结果。

 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既不停止,也不调用DestroyView,Detach方法。

这是另一个尝试从对话框中关闭尝试调用DialogFragment中对话框的dismiss()方法。

 boton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.d(TAG,"doDismiss"); FiltroDialog.this.getDialog().dismiss(); } }); 

不解除对话框并且不调用onDismiss既不停止,也不调用DestroyView,Detach方法。

我在应用程序中有一些对话框,从来没有遇到过这个问题,我不是完全是Android编程的新手,但我不知道我做错了什么? 这是compat库中的一个错误?

我今天遇到了同样的问题。

你是如何处理对话框中的视图的? 对我来说问题是我有一个FrameLayout,然后我将视图膨胀到(基于一些信息)。 我不知道为什么这会打破它,但确实如此。 当我用一个简单的viewstub替换framelayout时,它工作得很好。

希望它成功。 祝你好运!

嗯,不明白为什么那不起作用但你总是可以做getActivity()。onBackPressed()作为临时解决方法

从@zoltish回答开始,我发现在创建实际视图后将视图扩展到对话框内容会产生这种麻烦。 在onCreate我正在给布局充气,然后使用一个post调用onViewCreated工具,在那里我在第一个布局内膨胀另一个布局。 解决方案是所有布局/视图层次结构必须已从onCreate加载,至少在4.3模拟器上。

将Gianluca P.的评论转化为答案:

似乎使用错误的LayoutInflater可以打破解散function。 如果从android.support.v4.app.DialogFragment.getLayoutInflater(Bundle)获取LayoutInflater然后使用它来膨胀视图,则会解除dismiss。

要解决此问题,请改用(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)

只是其中一个Android的东西。

我有同样的问题,我将DialogFragment的引用移动到一个方法的本地范围,这对我有用。 (最初,这是我class级的领域)。