Error:Error: This fragment inner class should be static (soscall.MenuPrincipal.DialogoConfirmacionSMS) [ValidFragment]
public class DialogoConfirmacionSMS extends DialogFragment {
public DialogoConfirmacionSMS() { // Empty Constructor }
@Override public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(getApplication().getString(R.string.confirmacion_sms)) .setTitle(getString(R.string.confirmacion)) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) {
enviaSMS(); dialog.cancel(); } }) .setNegativeButton(getString(android.R.string.cancel), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) {
Toast.makeText(getApplicationContext(), getString(R.string.cancelada), Toast.LENGTH_SHORT).show(); dialog.cancel(); } });
return builder.create(); } }static public class DialogoConfirmacionSMS extends DialogFragment {....
Error:(966, 44) error: non-static method getApplicationContext() cannot be referenced from a static contextError:(959, 29) error: non-static method enviaSMS() cannot be referenced from a static contextError:(955, 32) error: non-static method getApplication() cannot be referenced from a static context--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/8h8ez2
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/desarrolladores-android/67f31396-ad7d-4f5f-ae6b-ba418982c80e%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
@SuppressLint("ValidFragment")
La pregunta del millón es ¿por qué quieres declarar la clase estática? Date cuenta que un DialogFragment vive en cuanto el contexto de la aplicación está inicializado en tiempo de ejecución. Por contra, una variable estática se crea nada más comenzar el programa.
--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/8h8ez2
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/desarrolladores-android/598569d7-584e-4f47-b7ca-f97766b72503%40googlegroups.com.
import android.app.AlertDialog;import android.app.Dialog;import android.content.DialogInterface;import android.os.Bundle;import android.support.v4.app.DialogFragment;import android.widget.Toast;
/** * Created by Miguel on 18/08/2014. */public class DialogoConfirmacionSMS extends DialogFragment {
public DialogoConfirmacionSMS() { // Empty Constructor }
@Override public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(getApplication().getString(R.string.confirmacion_sms)) .setTitle(getString(R.string.confirmacion)) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { enviaSMS(); dialog.cancel(); } }) .setNegativeButton(getString(android.R.string.cancel), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) {
Toast.makeText(getApplicationContext(), getString(R.string.cancelada), Toast.LENGTH_SHORT).show(); dialog.cancel(); } });
return builder.create(); }}Error:(37, 40) error: cannot find symbol method getApplicationContext()Error:(30, 25) error: cannot find symbol method enviaSMS()Error:(26, 28) error: cannot find symbol method getApplication()
Error:(30, 38) error: non-static method enviaSMS() cannot be referenced from a static context
Cuando defines una clase (no estática) Frament dentro de una clase Activity, esta, al instanciarse, mantendrá una referencia a la instancia de la clase de la actividad en la que se definió. De forma que cuando se destruya la actividad, si esa clase frament sigue viva (cacheada o lo cualquier cosa similar), como sigue manteniendo la referencia a la instancia de la clase actividad, esta no será recolectada por el recolector de basura, y tendrás una parte de la memoria que no se liberará hasta que este frament no sea eliminado. A este problema se le llama "memory leak", y si no haces las cosas bien, tu aplicación podría hacer que se consumiera toda la memoria del dispositivo.La solución más sencilla es definir ese fragment en su propio achivo de clase. Cortas y pegas esa clase (no estática) del frament a un archivo con el mismo nombre que la clase del fragment y listo. No tienes que hacer nada más.NUNCA ES BUENA IDEA SUPRIMIR LAS ADVERTENCIAS DE LINT. SI ESTÁN AHÍ, SON PARA ALGO. :)
2014-08-18 11:41 GMT+02:00 Miguel Martín <joyst...@gmail.com>:
El lunes, 18 de agosto de 2014 11:28:20 UTC+2, caligari escribió:La pregunta del millón es ¿por qué quieres declarar la clase estática? Date cuenta que un DialogFragment vive en cuanto el contexto de la aplicación está inicializado en tiempo de ejecución. Por contra, una variable estática se crea nada más comenzar el programa.
No si yo no quiero declararlo estática, es el android studio el que no me dejaba compilarlo si no lo declaraba estática, si lo compilaba normalmente no me daba problemas, si intentaba generar el apk firmado el compilador se paraba en esa linea y me mostraba el error que puse antes, ahora le he agregado el apaño que comente antes y ha vuelto a compilar el apk firmado, pero no se porque en las versiones anteriores de android si me dejaba hacerlo y ahora he tenido que añadir la linea para que lo hiciera, no se si me he explicado bien caligari
--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/8h8ez2
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/desarrolladores-android/c839b966-21c8-4f0a-83c0-f9f5d463270c%40googlegroups.com.