我有一个应用程序,我可以在其中打开许多对话框。这是其中之一,它们在开头和onDismiss中具有相同的代码。 这是onDismiss()的代码,当我执行getDialog.dismiss()时调用它:
@Override
public void onDismiss(DialogInterface dialog) {
ActividadPrincipal parent = (ActividadPrincipal) getActivity();
parent.ActualizarActions();
}
问题是:假设我在我的应用程序中打开一个Dialog,然后我关闭它(它执行getDialog.dismiss())。当我单击主页按钮或更改应用程序并返回到我的应用程序时,每次打开和关闭(或未关闭)对话框都会再次出现。知道会发生什么事吗?
编辑: 这是该类的代码:
public class ActividadPrincipal extends Activity implements DialogActionsListener, DialogEventoListener, DialogAccionListener, DialogBrilloListener, DialogTextoAccionListener, DialogNroTextoAccionListener, DialogNroEventoListener, DialogTextoEventoListener, DialogNroTextoEventoListener, DialogModificarActionListener{
ListView listView;
static ArrayList<Action> listaActions;
static ArrayList<EventoDefinido> listaEventosDefinidos;
static ArrayList<AccionDefinida> listaAccionesDefinidas;
static ArrayList<Action> listaActionsVacia = new ArrayList<Action>();
static ArrayList<EventoDefinido> listaEventosDefinidosVacia = new ArrayList<EventoDefinido>();
static ArrayList<AccionDefinida> listaAccionesDefinidasVacia = new ArrayList<AccionDefinida>();
static ArrayList<Integer> listaActionsEliminadas = new ArrayList<Integer>();
static ArrayList<Integer> listaAccionesDefinidasEliminadas = new ArrayList<Integer>();
static ArrayList<Integer> listaEventosDefinidosEliminados = new ArrayList<Integer>();
static ArrayList<Integer> listaActionsEliminadasOrdenada = new ArrayList<Integer>();
static ArrayList<Integer> listaAccionesDefinidasEliminadasOrdenada = new ArrayList<Integer>();
static ArrayList<Integer> listaEventosDefinidosEliminadosOrdenada = new ArrayList<Integer>();
static int contadorDePosiciones = 0;
static int contadorDePosicionesAcciones = 0;
static int contadorDePosicionesEventos = 0;
ArrayList<Accion> listaAcciones;
ArrayList<Evento> listaEventos;
boolean Actions = true;
boolean Eventos = false;
boolean Acciones = false;
boolean Ayuda = false;
static int idAccionTemporal = 0;
static int idEventoTemporal = 0;
// Creo el adapter para Actions
static AdapterActions adapterActions;
//Creo el adapter para Eventos
static AdapterEventosDefinidos adapterEventosDefinidos;
// Creo el adapter para Acciones
static AdapterAccionesDefinidas adapterAccionesDefinidas;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_actividad_principal);
listView = (ListView) findViewById(R.id.listView1);
listaActions = new ArrayList<Action>();
listaEventosDefinidos = new ArrayList<EventoDefinido>();
listaAccionesDefinidas = new ArrayList<AccionDefinida>();
listaAcciones = new ArrayList<Accion>();
listaEventos = new ArrayList<Evento>();
//REGISTRO EL RECEIVER PARA HEADPHONES, QUE LO NECESITA
broadcastAuriculares headsetReceiver = new broadcastAuriculares();
this.registerReceiver(headsetReceiver, new IntentFilter(Intent.ACTION_HEADSET_PLUG));
final boolean isFirstTime = MyPreferences.isFirst(ActividadPrincipal.this);
listView.setLongClickable(true);
registerForContextMenu(listView);
//ACÁ EMPIEZA LO DE ACTIONS
if (isFirstTime){
ActionsSQLite helper1 = new ActionsSQLite(this, "Actions", null, 1);
SQLiteDatabase db = helper1.getWritableDatabase();
db.execSQL("INSERT INTO Actions (IdAccionDefinida, IdEventoDefinido, Activa) VALUES (2, 1, 1)");
db.execSQL("INSERT INTO Actions (IdAccionDefinida, IdEventoDefinido, Activa) VALUES (6, 1, 0)");
db.execSQL("INSERT INTO Actions (IdAccionDefinida, IdEventoDefinido, Activa) VALUES (5, 3, 1)");
db.execSQL("INSERT INTO Actions (IdAccionDefinida, IdEventoDefinido, Activa) VALUES (3, 3, 0)");
db.execSQL("INSERT INTO Actions (IdAccionDefinida, IdEventoDefinido, Activa) VALUES (1, 2, 1)");
db.execSQL("INSERT INTO Actions (IdAccionDefinida, IdEventoDefinido, Activa) VALUES (4, 2, 0)");
db.execSQL("INSERT INTO Actions (IdAccionDefinida, IdEventoDefinido, Activa) VALUES (9, 3, 0)");
}
ActionsSQLite base = new ActionsSQLite(this, "Actions", null,1);
SQLiteDatabase db1 = base.getReadableDatabase();
db1 = openOrCreateDatabase("Actions",SQLiteDatabase.OPEN_READONLY, null);
Cursor c1 = db1.rawQuery("SELECT * FROM Actions", null);
try{
if(c1!=null){
int i = c1.getColumnIndexOrThrow("Id");
int j = c1.getColumnIndexOrThrow("IdAccionDefinida");
int k = c1.getColumnIndexOrThrow("IdEventoDefinido");
int l = c1.getColumnIndexOrThrow("Activa");
boolean esActiva;
//Nos aseguramos de que existe al menos un registro
while(c1.moveToNext()){
if (c1.getInt(l) == 0){
esActiva = false;
} else
{
esActiva = true;
}
//Recorremos el cursor hasta que no haya más registros
Action Action = new Action(c1.getInt(i), c1.getInt(j), c1.getInt(k), esActiva);
listaActions.add(Action);
}
}
else
Toast.makeText(getApplicationContext(),
"No hay nada :(", Toast.LENGTH_LONG).show();
}
catch (Exception e){
Log.i("bdActions", "Error al abrir o crear la base de datos" + e);
}
if(db1!=null){
db1.close();
}
//ACA LO DE ACCIONESDEFINIDAS
if (isFirstTime){
AccionesDefinidasSQLite helper3 = new AccionesDefinidasSQLite(getApplicationContext(), "AccionesDefinidas", null, 1);
SQLiteDatabase bd3 = helper3.getWritableDatabase();
bd3.execSQL("INSERT INTO AccionesDefinidas (IdAccion, Nombre, Aux) VALUES (1, 'Wi-Fi ON','')");
bd3.execSQL("INSERT INTO AccionesDefinidas (IdAccion, Nombre, Aux) VALUES (2, 'Wi-Fi OFF','')");
bd3.execSQL("INSERT INTO AccionesDefinidas (IdAccion, Nombre, Aux) VALUES (3, 'Modo Silencioso','')");
bd3.execSQL("INSERT INTO AccionesDefinidas (IdAccion, Nombre, Aux) VALUES (4, 'Modo Vibrador','')");
bd3.execSQL("INSERT INTO AccionesDefinidas (IdAccion, Nombre, Aux) VALUES (5, 'Modo Volumen','')");
bd3.execSQL("INSERT INTO AccionesDefinidas (IdAccion, Nombre, Aux) VALUES (6, 'Notificación Vitaminas','Tomar vitaminas')");
bd3.execSQL("INSERT INTO AccionesDefinidas (IdAccion, Nombre, Aux) VALUES (7, 'Brillo 20%','20')");
bd3.execSQL("INSERT INTO AccionesDefinidas (IdAccion, Nombre, Aux) VALUES (8, 'SMS','1159064309+Presentar Proyecto')");
bd3.execSQL("INSERT INTO AccionesDefinidas (IdAccion, Nombre, Aux) VALUES (9, 'Notif Ruidosa','Hacer ruido')");
}
AccionesDefinidasSQLite base3 = new AccionesDefinidasSQLite(getApplicationContext(), "AccionesDefinidas", null,1);
SQLiteDatabase db3 = base3.getReadableDatabase();
db3 = openOrCreateDatabase("AccionesDefinidas",SQLiteDatabase.OPEN_READONLY, null);
Cursor c3 = db3.rawQuery("SELECT * FROM AccionesDefinidas", null);
try{
if(c3!=null){
int h = c3.getColumnIndexOrThrow("Id");
int k = c3.getColumnIndexOrThrow("IdAccion");
int i = c3.getColumnIndexOrThrow("Nombre");
int j = c3.getColumnIndexOrThrow("Aux");
//Nos aseguramos de que existe al menos un registro
while(c3.moveToNext()){
//Recorremos el cursor hasta que no haya más registros
AccionDefinida Accion = new AccionDefinida(c3.getInt(h), c3.getInt(k), c3.getString(i), c3.getString(j));
listaAccionesDefinidas.add(Accion);
}
}
else
Toast.makeText(getApplicationContext(),
"No hay nada :(", Toast.LENGTH_LONG).show();
}
catch (Exception e){
Log.i("bdAccionesDefinidas", "Error al abrir o crear la base de datos" + e);
}
if(db3!=null){
db3.close();
}
//ACA LO DE EVENTOSDEFINIDOS
EventosDefinidosSQLite helper2 = new EventosDefinidosSQLite(getApplicationContext(), "EventosDefinidos", null, 1);
SQLiteDatabase bd2 = helper2.getWritableDatabase();
if (isFirstTime){
bd2.execSQL("INSERT INTO EventosDefinidos (IdEvento, Nombre, Aux) VALUES (1, 'Batería Baja','')");
bd2.execSQL("INSERT INTO EventosDefinidos (IdEvento, Nombre, Aux) VALUES (2, 'Auriculares Conectados','')");
//bd2.execSQL("INSERT INTO EventosDefinidos (IdEvento, Nombre, Aux) VALUES (3, 'Son las 22:30','22:30')");
bd2.execSQL("INSERT INTO EventosDefinidos (IdEvento, Nombre, Aux) VALUES (4, 'Mensaje Específico Perdido','Buscar celular')");
}
EventosDefinidosSQLite base2 = new EventosDefinidosSQLite(getApplicationContext(), "EventosDefinidos", null,1);
SQLiteDatabase db2 = base2.getReadableDatabase();
db2 = openOrCreateDatabase("EventosDefinidos",SQLiteDatabase.OPEN_READONLY, null);
Cursor c2 = db2.rawQuery("SELECT * FROM EventosDefinidos", null);
try{
if(c2!=null){
int h = c2.getColumnIndexOrThrow("Id");
int k = c2.getColumnIndexOrThrow("IdEvento");
int i = c2.getColumnIndexOrThrow("Nombre");
int j = c2.getColumnIndexOrThrow("Aux");
//Nos aseguramos de que existe al menos un registro
while(c2.moveToNext()){
//Recorremos el cursor hasta que no haya más registros
EventoDefinido Evento = new EventoDefinido(c2.getInt(h), c2.getInt(k), c2.getString(i), c2.getString(j));
listaEventosDefinidos.add(Evento);
}
}
else
Toast.makeText(getApplicationContext(),
"No hay nada :(", Toast.LENGTH_LONG).show();
}
catch (Exception e){
Log.i("bdEventosDefinidos", "Error al abrir o crear la base de datos" + e);
}
if(db2!=null){
db2.close();
}
for (int i=0;i<listaActions.size()-1;i++)
{
if(i == 0)
{
if (listaActions.get(i).getId() != 1)
{
for (int j=1;j<listaActions.get(i).getId();j++)
{
listaActionsEliminadas.add(j);
}
}
}else
if (listaActions.get(i).getId() != listaActions.get(i-1).getId() + 1)
{
for (int j=listaActions.get(i-1).getId();j<listaActions.get(i).getId();j++)
{
listaActionsEliminadas.add(j);
}
}
}
listaActionsEliminadas = listaActionsEliminadasOrdenada;
// Ponemos el adapter por default para cargar en la actividad principal
// Al adapter personalizado le pasamos el contexto y la lista que contiene
// Añadimos el adapter al listview
adapterActions = new AdapterActions(this, listaActions, listaActionsEliminadas);
listView.setAdapter(adapterActions);
//Declaración de Botones y programación
Button btnActions = (Button)findViewById(R.id.btnActions);
Button btnAyuda = (Button)findViewById(R.id.btnAyuda);
final Button btnCrear = (Button)findViewById(R.id.btn_crear);
btnActions.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//ACA EMPIEZA LO DE ACTIONS
ActionsSQLite base = new ActionsSQLite(getApplicationContext(), "Actions", null,1);
SQLiteDatabase db1 = base.getReadableDatabase();
db1 = openOrCreateDatabase("Actions",SQLiteDatabase.OPEN_READONLY, null);
Cursor c1 = db1.rawQuery("SELECT * FROM Actions", null);
listaActions.clear();
try{
if(c1!=null){
int i = c1.getColumnIndexOrThrow("Id");
int j = c1.getColumnIndexOrThrow("IdAccionDefinida");
int k = c1.getColumnIndexOrThrow("IdEventoDefinido");
int l = c1.getColumnIndexOrThrow("Activa");
boolean esActiva;
//Nos aseguramos de que existe al menos un registro
while(c1.moveToNext()){
if (c1.getInt(l) == 0){
esActiva = false;
} else
{
esActiva = true;
}
//Recorremos el cursor hasta que no haya más registros
Action Action = new Action(c1.getInt(i), c1.getInt(j), c1.getInt(k), esActiva);
listaActions.add(Action);
}
}
else
Toast.makeText(getApplicationContext(),
"No hay nada :(", Toast.LENGTH_LONG).show();
}
catch (Exception e){
Log.i("bdActions", "Error al abrir o crear la base de datos" + e);
}
if(db1!=null){
db1.close();
}
// Al adapter personalizado le pasamos el contexto y la lista que contiene
// Añadimos el adapter al listview
adapterActions = new AdapterActions(com.nahue.actions.ActividadPrincipal.this, listaActions, listaActionsEliminadas);
listView.setAdapter(adapterActions);
Actions = true;
Eventos = false;
Acciones = false;
Ayuda = false;
btnCrear.setVisibility(View.VISIBLE);
}
});
btnCrear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(Actions == true)
{
FragmentManager fm = getFragmentManager();
Log.e("OnClick", "Creó el FragmentManager");
DialogActions Dialog = DialogActions.newInstance(listaAccionesDefinidas, listaEventosDefinidos);
Log.e("OnClick", "Creó el Dialog");
Dialog.show(fm, "dialog_actions");
Log.e("OnClick", "Mostró el dialog");
} else if(Eventos == true)
{
FragmentManager fm = getFragmentManager();
Log.e("OnClick", "Creó el FragmentManager");
DialogEvento Dialog = DialogEvento.newInstance(listaEventos);
Log.e("OnClick", "Creó el Dialog");
Dialog.show(fm, "dialog_eventos");
Log.e("OnClick", "Mostró el dialog");
} else if(Acciones == true)
{
FragmentManager fm = getFragmentManager();
Log.e("OnClick", "Creó el FragmentManager");
DialogAccion Dialog = DialogAccion.newInstance(listaAcciones);
Log.e("OnClick", "Creó el Dialog");
Dialog.show(fm, "dialog_acciones");
Log.e("OnClick", "Mostró el dialog");
} else if(Ayuda == true)
{
//HacerNada
}
}
});
final String[] ArrayAyuda = new String[] { "¿Qué es un evento?",
"¿Qué es una acción?",
"¿Qué es una Action?",
"¿Cómo se define una acción?",
"¿Cómo se define un evento?",
"¿Cómo se crea una Action?",
"Acerca de Actions®"
};
btnAyuda.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Al adapter personalizado le pasamos el contexto y la lista que contiene
// Añadimos el adapter al listview
Actions = false;
Eventos = false;
Acciones = false;
Ayuda = true;
btnCrear.setVisibility(View.INVISIBLE);
ArrayAdapter<String> adapterAyuda = new ArrayAdapter<String>(com.nahue.actions.ActividadPrincipal.this, android.R.layout.simple_list_item_1, android.R.id.text1, ArrayAyuda);
listView.setAdapter(adapterAyuda);
}
});
listView.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {
// TODO Auto-generated method stub
if (Actions == true)
{
Action ActionAModificar = listaActions.get(position);
FragmentManager fm = getFragmentManager();
Log.e("OnClick", "Creó el FragmentManager");
DialogModificarAction Dialog = DialogModificarAction.newInstance(listaActions, listaAccionesDefinidas, listaEventosDefinidos, ActionAModificar);
Log.e("OnClick", "Creó el Dialog");
Dialog.show(fm, "dialog_modif_baja_actions");
Log.e("OnClick", "Mostró el dialog");
} else
if (Acciones == true)
{
if (listaAccionesDefinidas.get(position).getId() > 5)
{
AlertDialog.Builder builder = new AlertDialog.Builder(ActividadPrincipal.this);
builder.setMessage("Deseas eliminar esta acción? Se eliminarán todas las Actions asociadas.")
.setCancelable(false)
.setPositiveButton("Sí", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
ActionsSQLite base1 = new ActionsSQLite(getApplicationContext(), "Actions", null,1);
SQLiteDatabase db1 = base1.getReadableDatabase();
db1 = openOrCreateDatabase("Actions",SQLiteDatabase.OPEN_READONLY, null);
/*Cursor mCount= db1.rawQuery("SELECT Count(*) from Actions WHERE IdAccionDefinida = " + listaAccionesDefinidas.get(position).getId(), null);
mCount.moveToFirst();
int cantidad = mCount.getInt(0);
mCount.close();*/
db1 = base1.getWritableDatabase();
db1.execSQL("DELETE FROM Actions WHERE IdAccionDefinida = " + listaAccionesDefinidas.get(position).getId());
if(db1!=null){
db1.close();
}
AccionesDefinidasSQLite base = new AccionesDefinidasSQLite(ActividadPrincipal.this, "AccionesDefinidas", null,1);
SQLiteDatabase db = base.getWritableDatabase();
String miQuery = "DELETE FROM AccionesDefinidas WHERE Id = " + String.valueOf(listaAccionesDefinidas.get(position).getId());
for (int i = 0;i<listaActions.size();i++)
{
if (listaActions.get(i).getIdAccionDefinida() == listaAccionesDefinidas.get(position).getId())
{
removerActionEnLista(listaActions, listaActions.get(i), listaActionsEliminadas);
}
}
removerAccionEnLista(listaAccionesDefinidas, listaAccionesDefinidas.get(position));
db.execSQL(miQuery);
ordenarArrayAccionesDefinidasEliminadas();
ordenarArrayActionsEliminadas();
contadorDePosicionesAcciones += 1;
ActualizarActions();
ActualizarAccionesDefinidas();
//adapterAccionesDefinidas.notifyDataSetChanged();
dialog.cancel();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
} else
if (Eventos == true)
{
Log.e("El id del EventoDefinido es ", String.valueOf(listaEventosDefinidos.get(position).getId()));
if (listaEventosDefinidos.get(position).getId() > 2)
{
AlertDialog.Builder builder = new AlertDialog.Builder(ActividadPrincipal.this);
builder.setMessage("Deseas eliminar este evento? Se eliminarán todas las Actions asociadas.")
.setCancelable(false)
.setPositiveButton("Sí", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
ActionsSQLite base1 = new ActionsSQLite(getApplicationContext(), "Actions", null,1);
SQLiteDatabase db1 = base1.getReadableDatabase();
db1 = openOrCreateDatabase("Actions",SQLiteDatabase.OPEN_READONLY, null);
/*Cursor mCount= db1.rawQuery("SELECT Count(*) from Actions WHERE IdEventoDefinido = " + listaEventosDefinidos.get(position).getId(), null);
mCount.moveToFirst();
int cantidad = mCount.getInt(0);
mCount.close();*/
db1 = base1.getWritableDatabase();
db1.execSQL("DELETE FROM Actions WHERE IdEventoDefinido = " + listaEventosDefinidos.get(position).getId());
if(db1!=null){
db1.close();
}
EventosDefinidosSQLite base = new EventosDefinidosSQLite(ActividadPrincipal.this, "EventosDefinidos", null,1);
SQLiteDatabase db = base.getWritableDatabase();
String miQuery = "DELETE FROM EventosDefinidos WHERE Id = " + String.valueOf(listaEventosDefinidos.get(position).getId());
for (int i = 0;i<listaActions.size();i++)
{
if (listaActions.get(i).getIdEventoDefinido() == listaEventosDefinidos.get(position).getId())
{
removerActionEnLista(listaActions, listaActions.get(i), listaActionsEliminadas);
}
}
removerEventoEnLista(listaEventosDefinidos, listaEventosDefinidos.get(position));
db.execSQL(miQuery);
ordenarArrayEventosDefinidosEliminados();
ordenarArrayActionsEliminadas();
contadorDePosicionesEventos += 1;
ActualizarActions();
ActualizarEventosDefinidos();
//adapterAccionesDefinidas.notifyDataSetChanged();
dialog.cancel();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
return false;
}
});
}
//Métodos de actualización para cuando se crea Action/Accion/Evento
public void ActualizarActions(){
Log.e("Actualizar Actions", "Entró");
ActionsSQLite base = new ActionsSQLite(getApplicationContext(), "Actions", null,1);
SQLiteDatabase db1 = base.getReadableDatabase();
db1 = openOrCreateDatabase("Actions",SQLiteDatabase.OPEN_READONLY, null);
Cursor c1 = db1.rawQuery("SELECT * FROM Actions", null);
listaActions.clear();
AdapterActions ActionsAdapterVacio = new AdapterActions(this, listaActionsVacia, listaActionsEliminadas);
listView.setAdapter(ActionsAdapterVacio);
try{
if(c1!=null){
int i = c1.getColumnIndexOrThrow("Id");
int j = c1.getColumnIndexOrThrow("IdAccionDefinida");
int k = c1.getColumnIndexOrThrow("IdEventoDefinido");
int l = c1.getColumnIndexOrThrow("Activa");
boolean esActiva;
//Nos aseguramos de que existe al menos un registro
while(c1.moveToNext()){
if (c1.getInt(l) == 0){
esActiva = false;
} else
{
esActiva = true;
}
//Recorremos el cursor hasta que no haya más registros
Action Action = new Action(c1.getInt(i), c1.getInt(j), c1.getInt(k), esActiva);
listaActions.add(Action);
}
}
else
Toast.makeText(getApplicationContext(),
"No hay nada :(", Toast.LENGTH_LONG).show();
}
catch (Exception e){
Log.i("bdActions", "Error al abrir o crear la base de datos " + e);
}
if(db1!=null){
db1.close();
}
adapterActions = new AdapterActions(this, listaActions, listaActionsEliminadas);
listView.setAdapter(adapterActions);
}
public static void removerActionEnLista(ArrayList<Action> listaActions, Action ActionAEliminar, ArrayList<Integer> listaActionsEliminadas)
{
for (int i=0;i<listaActions.size();i++)
{
if (listaActions.get(i).getId() == ActionAEliminar.getId())
{
listaActions.remove(i);
listaActionsEliminadas.add(ActionAEliminar.getId());
break;
}
}
}
}