69

いつ

  • ダイアログ領域の外側をタッチ
  • 戻るボタンを押す

onDismiss(またはonCancel) が呼び出されることを期待しています。ただし、どちらも呼び出されません。私が見逃しているものがあることを知ってもいいですか?AlertDialog setOnDismisListener not workingから、onCancel戻るボタンを押すと呼び出されると思いました。しかし、それは私にはうまくいきません。私が見逃したものがあることを知ってもいいですか?

public class RateAppDialogFragment extends SherlockDialogFragment {
    public static RateAppDialogFragment newInstance() {
        RateAppDialogFragment rateAppDialogFragment = new RateAppDialogFragment();
        return rateAppDialogFragment;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Get the layout inflater
        LayoutInflater inflater = getActivity().getLayoutInflater();
        View view = inflater.inflate(R.layout.rate_app_dialog_fragment, null);

        Utils.setCustomTypeFace(view, Utils.ROBOTO_LIGHT_TYPE_FACE);

        final AlertDialog dialog = new AlertDialog.Builder(this.getSherlockActivity())            
        .setTitle("Love JStock?")
        .setView(view)
        // Add action buttons
        .setPositiveButton("Rate 5 stars \u2605", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int id) {
                Utils.showShortToast("Rate");
            }
        })
        .setNegativeButton("No", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                Utils.showShortToast("No");
            }
        })
        .setNeutralButton("Later", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                Utils.showShortToast("Later");
            }
        })
        .create();

        dialog.setCanceledOnTouchOutside(true);

        dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {

            @Override
            public void onCancel(DialogInterface dialog) {
                Utils.showShortToast("Back button pressed?");
            }
        });

        dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {

            @Override
            public void onDismiss(DialogInterface dialog) {
                // TODO Auto-generated method stub
                Utils.showShortToast("Back button pressed?");
            }
        });

        return dialog;
    }

}

    FragmentManager fm = fragmentActivity.getSupportFragmentManager();
    if (fm.findFragmentByTag(RATE_APP_DIALOG_FRAGMENT) != null) {
        return;
    }

    RateAppDialogFragment rateAppDialogFragment = RateAppDialogFragment.newInstance();
    rateAppDialogFragment.show(fm, RATE_APP_DIALOG_FRAGMENT);  
4

5 に答える 5

167

DialogFragment表示に使用しているときに問題が発生しますDialog

http://developer.android.com/reference/android/app/DialogFragment.htmlによると、解決策はオーバーライドonCancelすることですDialogFragment

http://developer.android.com/reference/android/app/DialogFragment.html#onCreateDialog(android.os.Bundle)にも注意してください

注: DialogFragment は、Dialog.setOnCancelListener および Dialog.setOnDismissListener コールバックを所有しています。自分で設定しないでください。これらのイベントについて調べるには、onCancel(DialogInterface) と onDismiss(DialogInterface) をオーバーライドします。

// This is DialogFragment, not Dialog
@Override
public void onCancel(DialogInterface dialog) {
}
于 2013-08-16T09:20:56.340 に答える
11

を使用している場合はAlertDialog、 を参照してください。

builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
    @Override
    public void onCancel(DialogInterface dialog) {
        // dialog dismiss without button press
    }
});

dialog.setCanceledOnTouchOutside(true)(@LeosLiterakに感謝)

于 2015-09-15T09:43:44.020 に答える
4

backPressedキーイベントが設定されていません

dialog.setOnKeyListener(new Dialog.OnKeyListener() {
    @Override
    public boolean onKey(DialogInterface arg0, int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            finish();
        }
        return true;
    }
});
于 2013-08-16T07:27:18.500 に答える
3

このトピックを読む必要があります:ダイアログの外側をクリックしてダイアログを閉じるには?

Dialog dialog = new Dialog(context)
dialog.setCanceledOnTouchOutside(true);
于 2013-08-16T08:51:04.160 に答える
2

DialogFragment で、オーバーライドします

@Override
public void onStop() {
    super.onStop();
    if (mListener != null) {
       // do something here
    }
}
于 2015-03-19T04:02:02.573 に答える