Ayuda en Java con Android Studio - Habilitar cuandro de dialogo al terminar partida

Iniciado por rubia28, 22 Octubre 2021, 20:32 PM

0 Miembros y 1 Visitante están viendo este tema.

rubia28

Buenas tardes a todos,

Estoy haciendo un juego de puzzles y necesito que cuando termine la partida se abra un cuadro de dialogo sin necesidad de tener que darle a ningún botón ni cerrar la actividad.

He conseguido poder hacer una ventana emergente al terminar la partida, pero no consigo que cumpla con todas las funcionalidades que necesito y me gustaría que saliera un cuadro de dialogo con más prestaciones.

He estado buscando info y he conseguido que el cuadro de dialogo se abra si inserto un botón, pero no puedo meter un botón para guardar la partida ya que lo que quiero es que al terminar la partida aparezca directamente el cuadro de dialogo y se le solicite al jugador su nombre para guardarla y se informe de la puntuación (el cuadro de dialogo ya lo tengo con estas prestaciones).

Cómo puedo llamar al cuadro de dialogo para que se abra sin necesidad de que haya un botón para ello?

Os adjunto la parte del código que llama al cuadro de dialogo a través del botón. ¿Cómo podría hacerlo para que realizase la misma acción al terminar la partida en lugar de habilitando el botón?

Código (java) [Seleccionar]
Button botonGuardarPartida = (Button) findViewById(R.id.botonGuardarPartida);
       botonGuardarPartida.setOnClickListener(new OnClickListenerGuardarPartida());


Mil gracias como siempre por vuestra ayuda, saludos.


rub'n

Cita de: rubia28 en 22 Octubre 2021, 20:32 PM
Buenas tardes a todos,

Estoy haciendo un juego de puzzles y necesito que cuando termine la partida se abra un cuadro de dialogo sin necesidad de tener que darle a ningún botón ni cerrar la actividad.

He conseguido poder hacer una ventana emergente al terminar la partida, pero no consigo que cumpla con todas las funcionalidades que necesito y me gustaría que saliera un cuadro de dialogo con más prestaciones.

He estado buscando info y he conseguido que el cuadro de dialogo se abra si inserto un botón, pero no puedo meter un botón para guardar la partida ya que lo que quiero es que al terminar la partida aparezca directamente el cuadro de dialogo y se le solicite al jugador su nombre para guardarla y se informe de la puntuación (el cuadro de dialogo ya lo tengo con estas prestaciones).

Cómo puedo llamar al cuadro de dialogo para que se abra sin necesidad de que haya un botón para ello?

Os adjunto la parte del código que llama al cuadro de dialogo a través del botón. ¿Cómo podría hacerlo para que realizase la misma acción al terminar la partida en lugar de habilitando el botón?

Código (java) [Seleccionar]
Button botonGuardarPartida = (Button) findViewById(R.id.botonGuardarPartida);
        botonGuardarPartida.setOnClickListener(new OnClickListenerGuardarPartida());


Mil gracias como siempre por vuestra ayuda, saludos.



Necesitas que se cumpla una condición socio.

Ahora mismo usas el listener del botón para invocar al método

OnClickListenerGuardarPartida()

Si o si ahora mismo abres una ventana al hacer click.

* Extrae ese método OnClickListenerGuardarPartida() y deberás colocarlo en otro lugar.


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

rubia28

Hola rub'n,

Lo primero de todo darte las gracias por la ayuda.

He intentado llamar al método TouchListenerGuardarPatida() desde el método que finaliza la partida y me abria correctamente la ventana emergente, pero al indicar el método TouchListenerGuardarPatida() en el método de gameOver la partida finaliza pero no realiza ninguna otra acción. La clase que tengo para el cuadro de dialogo la tengo tal que así;

Código (java) [Seleccionar]
public class TouchListenerGuardarPartida implements View.OnClickListener{

   ObjectPartida objectPartida = new ObjectPartida();
   public void onClick(View view) {
       final Context context = view.getContext();

       LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
       final View vistaFormularioGuardarPartida = inflater.inflate(R.layout.guardar_partida, null, false);

       final EditText guardarNombreJugador = (EditText) vistaFormularioGuardarPartida.findViewById(R.id.escribirNombre);

       //Abrir cuadro de dialogo.
       AlertDialog.Builder builder = new AlertDialog.Builder(context);
       builder.setView(vistaFormularioGuardarPartida);
       builder.setTitle("Guardar Partida");
       builder.setMessage("Enhorabuena has resuelto el puzzle!\n" + "Tiempo de resolución: " + objectPartida.tiempoPartida + "\nIngresa tu nombre: ");
       builder.setPositiveButton("Guardar",
               new DialogInterface.OnClickListener() {
                   @Override
                   public void onClick(DialogInterface dialog, int which) {
                       //Convertir los datos introducidos por el usurio en tipo String.
                       String nombreJugador = guardarNombreJugador.getText().toString();

                       //Objeto para poder manejar los valores.
                       objectPartida.nombre = nombreJugador;
                       //objectJudadores.tiempo = tiempoJugador;

                       boolean guardarPartida = new ControladorPartida(context).crear(objectPartida);
                       if (guardarPartida) {
                           Toast.makeText(context, "PARTIDA GUARDADA", Toast.LENGTH_SHORT).show();
                       } else {
                           Toast.makeText(context, "NO SE HA GUARDADO LA PARTIDA", Toast.LENGTH_SHORT).show();
                       }

                   }
               });
       builder.show();

   }

}


La idea original la he cogido de cómo crear una base de datos en Android con SQLite y guardar los datos a través de un cuadro de dialogo mediante un CRUD. Pero no soy capaz de saber como poder hacer saltar al cuadro de dialogo cuando termine la partida sin necesidad de darle a ningún botón como ocurria cuando llamaba a la ventana emergente...

Estoy ya desesperada porque no consigo dar con la forma de poder hacer saltar el cuadro para que me de la información y poder guardar los datos.

Mil gracias por la ayuda, saludos.

rub'n

TouchListenerGuardarPatida es una clase, donde la usas? Instancias?

Si haces new TouchListenerGuardarPatida(); debería salir ese Dialog


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

rubia28

Buenos días rub'n,

Ayer por fin conseguí poder guardar los datos del jugador en SQLite, al final lo que hice fue crear una nueva Activity donde mostrar por pantalla el nombre del jugador solicitado al terminar la partida junto con el tiempo de resolución del puzzle. En ese Activity habilité un botón que me permite guardar los datos (jugador y tiempo).

Ahora me encuentro con un nuevo problema.. me gustaría que en otro Activity, directamente se ejecutase una consulta a la tabla de SQLite de Partidas y me mostrase todo los datos que hay en la misma... pero por más que he probado formas de hacerlo.. no consigo que funcione.

El código que tengo hasta ahora es el siguiente;

Código (java) [Seleccionar]
public class HallOfFame extends AppCompatActivity {

    ArrayList<String> lista = new ArrayList<>();
    ListView listaResultados;
    ArrayAdapter adaptador;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hall_of_fame);

        AdminSQLiteOpenHelper adminSQLiteOpenHelper = new AdminSQLiteOpenHelper(HallOfFame.this);
        SQLiteDatabase database = adminSQLiteOpenHelper.getWritableDatabase();
        String sql = "SELECT * FROM Partidas";
        Cursor registros = database.rawQuery(sql, null);

        if(registros.moveToFirst()){
            do{
                lista.add(registros.getString(1));
                lista.add(registros.getString(2));
            } while (registros.moveToNext());
        }

        listaResultados = (ListView) findViewById(R.id.listViewResultados);
        AdminSQLiteOpenHelper db = new AdminSQLiteOpenHelper(getApplicationContext());
        adaptador = new ArrayAdapter(this, android.R.layout.activity_list_item);
        listaResultados.setAdapter(adaptador);

    }
}


Y en su XML correspondiente

Código (xml) [Seleccionar]
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/listResultados"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".HallOfFame">

    <ListView
        android:id="@+id/listViewResultados"
        android:layout_width="409dp"
        android:layout_height="729dp"
        android:layout_marginStart="1dp"
        android:layout_marginTop="1dp"
        android:layout_marginEnd="1dp"
        android:layout_marginBottom="1dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>


Normalmente en Java puedo hacer el Read a la BBDD sin problemas, pero en Android Studio no consigo que los resultados de la tabla se muestren en pantalla a través de la ListView..
No sé ya como poder solucionar esta parte ¿Cómo debería de ponerlo en la Activity para que directamente al entrar en esa Activity se lanzará la consulta a SQLite y me mostrase los datos en pantalla?

Mil gracias por la ayuda, saludos.

rubia28

Solucionado!!

Implemento en la clase que controla la BBDD.

Código (java) [Seleccionar]
public Cursor getDatos(){
        String columnas[] = {"id","nombre","tiempo"};
        Cursor c = this.getReadableDatabase().query(TABLE_JUGADORES, columnas, null, null, null, null, "tiempo");
        return c;
    }


A continuación en la clase que queremos que se muestre el resultado en pantalla añadimos el siguiente método;

Código (java) [Seleccionar]
private void showResultados(){
        db = new AdminSQLiteOpenHelper(this);
        Cursor c = db.getDatos();
        item = new ArrayList<String>();
        String title = "",content = "";

        if(c.moveToFirst()){
            do{
                title = c.getString(1);
                content = c.getString(2);
                item.add(title + " " + content);

            }while (c.moveToNext());
        }
        ArrayAdapter<String> adaptador = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, item);
        lista.setAdapter(adaptador);
    }


Para que funcione el método declaremos una listview en el método principal de la clase.

Código (java) [Seleccionar]
lista = (ListView) findViewById(R.id.listViewResultados);
        showResultados();


Saludos!!

rub'n



rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

rubia28

Hola de nuevo Rub'n!

A que te refieres con identacion??

Gracias, saludos!!