I have an AlerDialog in my App, the main problem is that in versions of Android Nougat and later this works perfectly but in Marshmallow and below the AlertDialog gives me this error: requestFeature() must be called before adding content
but at no time in my activity have I called requestWindowFeature
Here is my code:
public Dialog onCreateDialog(Bundle savedInstanceState) {
return createRadioListDialog();
}
public android.app.AlertDialog createRadioListDialog() {
android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(getActivity());
final CharSequence[] items = new CharSequence[3];
items[0] = "Voy a asistir";
items[1] = "No voy a asistir";
items[2] = "Aún no lo sé";
builder.setTitle("Asistencia")
.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
asistenciaD = String.valueOf(1);
guardarMeta();
dialog.dismiss();
Objects.requireNonNull(getActivity()).getSupportFragmentManager().beginTransaction().replace(R.id.container, new Main_Fragment_Asistencia(), "MainFragment")
.commit();
}if (which == 1) {
asistenciaD = String.valueOf(2);
guardarMeta();
dialog.dismiss();
Objects.requireNonNull(getActivity()).getSupportFragmentManager().beginTransaction().replace(R.id.container, new Main_Fragment_Asistencia(), "MainFragment")
.commit();
}if (which == 2) {
asistenciaD = String.valueOf(0);
guardarMeta();
dialog.dismiss();
Objects.requireNonNull(getActivity()).getSupportFragmentManager().beginTransaction().replace(R.id.container, new Main_Fragment_Asistencia(), "MainFragment")
.commit();
}
}
});
return builder.create();
}
}
Thanks for your response!
Fragment Integer:
/**
* Fragmento con diálogo básico
*/
public class SimpleDialog extends DialogFragment {
/*
Etiqueta de depuración
*/
/*
Controles
*/
private String asistenciaD;
/*
Valor del argumento extra
*/
String id;
/**
* Es la meta obtenida como respuesta de la petición HTTP
*/
private Meta_Asistencia_si_no metaOriginal;
/**
* Instancia Gson para el parsing Json
*/
private Gson gson = new Gson();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflando layout del fragmento
Log.v("correcto", "si");
View v = inflater.inflate(R.layout.fragment_form, container, false);
// Obtención de instancias controles
Bundle mArgs = getArguments();
id = mArgs.getString("miId");
Log.v("cii", "siii");
// Obtener valor extra
if (id != null) {
cargarDatos();
}
return v;
}
/**
* Obtiene los datos desde el servidor
*/
private void cargarDatos() {
// Añadiendo idMeta como parámetro a la URL
String newURL = Constantes.GET_BY_ID;
// Consultar el detalle de la meta
VolleySingleton.getInstance(getActivity()).addToRequestQueue(
new JsonObjectRequest(
Request.Method.GET,
newURL,
null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
// Procesa la respuesta GET_BY_ID
procesarRespuestaGet(response);
Log.d("suceeful", String.valueOf(10));
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}
)
);
}
/**
* Procesa la respuesta de obtención obtenida desde el sevidor *
*/
private void procesarRespuestaGet(JSONObject response) {
try {
String estado = response.getString("estado");
switch (estado) {
case "1":
JSONObject meta = response.getJSONObject("meta");
// Guardar instancia
metaOriginal = gson.fromJson(meta.toString(), Meta_Asistencia_si_no.class);
Log.d("suceeful", String.valueOf(20));
// Setear valores de la meta
break;
case "2":
String mensaje = response.getString("mensaje");
// Mostrar mensaje
Toast.makeText(
getActivity(),
mensaje,
Toast.LENGTH_LONG).show();
// Enviar código de falla
getActivity().setResult(Activity.RESULT_CANCELED);
// Terminar actividad
getActivity().finish();
break;
}
} catch (JSONException e) {
e.printStackTrace();
}
}
/**
* Compara los datos actuales con aquellos que se obtuvieron
* por primera vez en la respuesta HTTP
*
* @return true si los datos no han cambiado, de lo contrario false
*/
public boolean validarCambios() {
return metaOriginal.compararCon(obtenederDatos());
}
/**
* Retorna en una nueva meta creada a partir
* de los datos del formulario actual
*
* @return Instancia {@link Meta}
*/
private Meta_Asistencia_si_no obtenederDatos() {
String titulo = asistenciaD;
return new Meta_Asistencia_si_no("1", titulo);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true); // Contribución a la AB
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case android.R.id.home:// CONFIRMAR
if (!validarCambios())
guardarMeta();
else
// Terminar actividad, ya que no hay cambios
getActivity().finish();
return true;
}
;
return super.onOptionsItemSelected(item);
}
/**
* Guarda los cambios de una meta editada.
* <p>
* Si está en modo inserción, entonces crea una nueva
* meta en la base de datos
*/
private void guardarMeta() {
// Obtener valores actuales de los controles
HashMap<String, String> map = new HashMap<>();// Mapeo previo
map.put("asistenciaD", asistenciaD);
map.put("id_musico", id);
String newURL = Constantes.UPDATE;
// Crear nuevo objeto Json basado en el mapa
JSONObject jobject = new JSONObject(map);
// Depurando objeto Json...
Log.d("TAGK", jobject.toString());
Log.v("prueba", String.valueOf(9));
// Actualizar datos en el servidor
VolleySingleton.getInstance(getActivity()).addToRequestQueue(
new JsonObjectRequest(
Request.Method.POST,
newURL,
jobject,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.v("prueba", String.valueOf(1));
procesarRespuestaActualizar(response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("error_volley", "Error Volley: " + error.getMessage());
}
}
) {
@Override
public Map<String, String> getHeaders() {
Map<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json; charset=utf-8");
headers.put("Accept", "application/json");
return headers;
}
@Override
public String getBodyContentType() {
return "application/json; charset=utf-8" + getParamsEncoding();
}
}
);
}
/**
* Procesa la respuesta de actualización obtenida desde el sevidor
*/
private void procesarRespuestaActualizar(JSONObject response) {
try {
// Obtener estado
String estado = response.getString("estado");
// Obtener mensaje
String mensaje = response.getString("mensaje");
switch (estado) {
case "1":
// Mostrar mensaje
Toast.makeText(
getActivity(),
mensaje,
Toast.LENGTH_LONG).show();
// Enviar código de éxito
getActivity().setResult(Activity.RESULT_OK);
// Terminar actividad
getActivity().finish();
break;
case "2":
// Mostrar mensaje
Toast.makeText(
getActivity(),
mensaje,
Toast.LENGTH_LONG).show();
// Enviar código de falla
getActivity().setResult(Activity.RESULT_CANCELED);
// Terminar actividad
getActivity().finish();
break;
}
} catch (JSONException e) {
e.printStackTrace();
}
}
public SimpleDialog() {
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return createRadioListDialog();
}
public android.app.AlertDialog createRadioListDialog() {
android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(getActivity());
final CharSequence[] items = new CharSequence[3];
items[0] = "Voy a asistir";
items[1] = "No voy a asistir";
items[2] = "Aún no lo sé";
builder.setTitle("Asistencia")
.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
asistenciaD = String.valueOf(1);
guardarMeta();
dialog.dismiss();
Objects.requireNonNull(getActivity()).getSupportFragmentManager().beginTransaction().replace(R.id.container, new Main_Fragment_Asistencia(), "MainFragment")
.commit();
}if (which == 1) {
asistenciaD = String.valueOf(2);
guardarMeta();
dialog.dismiss();
Objects.requireNonNull(getActivity()).getSupportFragmentManager().beginTransaction().replace(R.id.container, new Main_Fragment_Asistencia(), "MainFragment")
.commit();
}if (which == 2) {
asistenciaD = String.valueOf(0);
guardarMeta();
dialog.dismiss();
Objects.requireNonNull(getActivity()).getSupportFragmentManager().beginTransaction().replace(R.id.container, new Main_Fragment_Asistencia(), "MainFragment")
.commit();
}
}
});
return builder.create();
}
}