DialogFragment在演出后立即被解雇

时间:2014-08-26 08:28:33

标签: android alertdialog android-dialogfragment dismiss

我创建了一个DialogFragment,它应该在调用onActivityResult后显示。 但是在调用dialog.show()之后,Dialog无缘无故地自动解除。

我正在使用BarcodeScanner lib来扫描QR码,在onActivityResult中我只保存数据(此时我也尝试显示Dialog,但它没有用。)

if ((requestCode == REQUEST_BARCODESCANNER) && (resultCode == RESULT_OK)) {
    mBarcodeScanned = true;
    mBarcodeScanResult = getBarcodeScannerResult(data.getExtras());
}
onResume中的

我现在正在检查这些变量:

if(mBarcodeScanResult == null && mBarcodeScanned){
    mBarcodeScanned = false;
    showDialog(MyDialogFragment.getInvalidQrCodeDialog(this));
} else if(mBarcodeScanResult != null && mBarcodeScanned){
    showDialog(MyDialogFragment.getSomeDialog(this, v1, v2));
}
showDialog()中的

我只是调用show:

dialog.show(getSupportFragmentManager(), MyDialogFragment.class.getSimpleName());

现在,如果扫描了QR码,它应该显示对话框。 出于某种原因,dialog.show()之后我在MyDialogFragment类中检查了onDismiss(),并且它也被调用了,但我真的不知道为什么?

MyDialogFragment正在使用onCreateDialog方法,该方法创建要返回的AlertDialogs。方法getSomeDialog()getInvalidQrCodeDialog()只是实例化片段。

编辑:MyDialogClass

public class MyDialogFragment extends DialogFragment {

    private static final String BUNDLE_DIALOG_TYPE = "bundle_dialog_type";

    private DialogType mDialogType;

    public enum DialogType{
        QR_CODE_INVALID, SOME_DIALOG
    }

    public static Fragment getInvalidQrCodeDialog(final Context context) {
        Bundle args = new Bundle();
        args.putString(BUNDLE_DIALOG_TYPE, DialogType.QR_CODE_INVALID.name());
        return MyDialogFragment.instantiate(context, MyDialogFragment.class.getName(), args);
    }

    public static Fragment getSomeDialog(final Context context) {
        Bundle args = new Bundle();
        args.putString(BUNDLE_DIALOG_TYPE, DialogType.SOME_DIALOG.name());
        return MyDialogFragment.instantiate(context, MyDialogFragment.class.getName(), args);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        handleArguments();
    }

    private void handleArguments() {
        final Bundle arguments = getArguments();
        if(arguments != null) {
            mDialogType = DialogType.valueOf(arguments.getString(BUNDLE_DIALOG_TYPE, DialogType.SOME_DIALOG.name()));
        }
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        switch(mDialogType){
            case QR_CODE_INVALID: return DialogHelper.showQRCodeInvalidDialog(getActivity());
            case SOME_DIALOG: return DialogHelper.showSomeDialog(getActivity());
            default: return null;
        }
    }
}

并且DialogHelper做了这样的事情:

public static AlertDialog showQRCodeInvalidDialog(final Context context){
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setMessage(R.string.barcode_invalid);
    builder.setTitle(R.string.barcode_invalid_title);
    builder.setPositiveButton(android.R.string.ok,
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.dismiss();
                }
            });
    return builder.create();
}

1 个答案:

答案 0 :(得分:0)

问题似乎是支持包DialogFragment。 我只是将它从支持更改为原始的DialogFragment,一切都按预期工作。