Android DialogFragment 不会关闭

标签 android android-fragments android-dialogfragment android-support-library

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

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 方法我只能停止,DestroyView,分离而不是 onDismiss()

当我再次点击按钮时,LogCat 中只显示这个

D/FiltroDialog(30492): doDismiss

我尝试了几种关闭对话框的方法。这是我用来显示 Activity 对话框的代码(也从 fragment 中尝试过)

FiltroDialog newFragment = FiltroDialog.newInstance();
newFragment.show(getSupportFragmentManager(), TAG_DLG_FILTROS); 

这是尝试从 Activity 中关闭对话框的代码(也从 fragment 中尝试,结果相同)

DialogFragment prev = (DialogFragment) getSupportFragmentManager().findFragmentByTag(TAG_DLG_FILTROS);
if (prev != null) {
    prev.dismiss();         
}

这是另一个尝试关闭 Activity 的尝试(也从 fragment 中尝试,结果相同)

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 或 Stop、DestroyView、Detach 方法。

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

最佳答案

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

您如何处理对话框中的 View ?对我来说,问题是我有一个 FrameLayout,然后我在其中将 View 膨胀到(基于一些信息)。我不知道为什么这会破坏它,但确实如此。当我用一个简单的 viewstub 替换框架布局时,它工作得非常好。

希望一切顺利。祝你好运!

关于Android DialogFragment 不会关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17447910/

相关文章:

java - Android - 布局 xml 中 EditText 大小的问题

android - Activity 和 FragmentActivity 的区别

android - 在 MVVM 架构中使用 DialogFragment 的正确方法是什么?

android - 具有自定义布局的 DialogFragment 导致我的应用程序崩溃

android - 发布应用程序的模拟位置权限问题

java - 初始化后向 fragment 发送数据

android - 我想在 android 中将音频服务器 (/frameworks/av/media/audioserver) 构建为 64 位,但它无法启动

java - 获取 DialogFragment 进行实例化

android - SElinux Android 消息解释

Android - MapsActivity 标题栏中的后退按钮