簡體   English   中英

Android DialogFragment不會解散

[英]Android DialogFragment doesn't dismiss

我在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我正在給布局充氣,然后使用帖子來調用onViewCreated工具,在那里我在第一個布局內膨脹另一個布局。 解決方案是所有布局/視圖層次結構必須已從onCreate加載,至少在4.3模擬器上。

將Gianluca P.的評論轉化為答案:

似乎使用錯誤的LayoutInflater可以打破解散功能。 如果從android.support.v4.app.DialogFragment.getLayoutInflater(Bundle)獲取LayoutInflater然后使用它來膨脹視圖,則會解除dismiss。

要解決此問題,請改用(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)

只是其中一個Android的東西。

我遇到了同樣的問題,我將DialogFragment的引用移動到了一個方法的本地范圍,這對我有用。 (最初,這是我班級的領域)。

為什么不嘗試僅使用此代碼:

dismiss();

如果你想自己解除Dialog Fragment。 您可以簡單地將此代碼放在要取消Dialog的對話框片段中。

例如:

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        dismiss();
    }
});

這將關閉屏幕上顯示的最近的Dialog Fragment。

希望它對你有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM