open from ejemplo activity android android-dialogfragment

android - from - dialogfragment kotlin



DialogFragment setCancelable property not working (3)

Estoy trabajando en una aplicación de Android y estoy usando un DialogFragment para mostrar un diálogo y quiero que ese DialogFragment no se cancele. He convertido la propiedad de diálogo cancelable en falsa, pero aún no está afectando.

Por favor mira mi código y sugiéreme una solución.

public class DialogTest extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { return super.onCreateDialog(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.dialog_test, container, true); getDialog().requestWindowFeature(STYLE_NO_TITLE); getDialog().setCancelable(false); return view; } }


En caso de que use el generador de alertas (y probablemente en todos los casos ajuste el cuadro de diálogo dentro de un DialogFragment) para ayudar a construir su diálogo, no use getDialog (). SetCancelable (falso) o Dialog.setCancelable (falso) porque no va a funcionar. trabajo. Use setCancelable (false) como se muestra en el código a continuación tal como se menciona en la documentación oficial de Android:

public void setCancelable (boolean cancelable)

Agregado en el nivel API 11 Controle si el cuadro de diálogo que se muestra es cancelable. Use esto en lugar de llamar directamente a Dialog.setCancelable (boolean), porque DialogFragment necesita cambiar su comportamiento en función de esto. "

ref: http://developer.android.com/reference/android/app/DialogFragment.html#setCancelable(boolean)

public class MyDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { LayoutInflater inflater = getActivity().getLayoutInflater(); View view = inflater.inflate(R.layout.dialog_layout, null, false); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) .setTitle("in case you want use a title").setView(view); AlertDialog alert = builder.create(); // alert.setCancelable(false); <-- dont'' use that instead use bellow approach setCancelable(false); <- press back button not cancel dialog, this one works fine alert.setCanceledOnTouchOutside(false); <- to cancel outside touch return alert; }


Use el siguiente fragmento

void showDialog() { DialogFragment newFragment = MyAlertDialogFragment.newInstance( R.string..alert_dialog_two_buttons_title); newFragment.setCancelable(false); newFragment.show(getFragmentManager(), "dialog"); }

y si desea desactivar el cuadro de diálogo de toque externo, use la siguiente línea de código

DialogFragment.getDialog().setCanceledOnTouchOutside(true);


@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.dialog_test, container, true); getDialog().requestWindowFeature(STYLE_NO_TITLE); getDialog().setCancelable(false); return view; }

en lugar de getDialog().setCancelable(false); tienes que usar directamente setCancelable(false);

entonces la respuesta actualizada será así

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.dialog_test, container, true); getDialog().requestWindowFeature(STYLE_NO_TITLE); setCancelable(false); return view; }