himorino
22/02/15, 17:29:55
Hola buenas, estoy haciendo mi 1º aplicación por mi cuenta y me he topado con 1 problema:
La idea de la aplicacion es sencilla, hacer una aplicacion de tipo quiz.
Se trata de un textview y luego un listview, en el textview quiero aparecera la pregunta, en el listview las respuestas.
Lo que quiero hacer es que cuando selecciones 1 opcion, le saldra un toast en plan acertaste o no, y a continuación, cambiar los datos mostrados en el textview y el listview por la 2º pregunta y respuestas, ahi es donde me falla.
Mi problema esta en que creo que no entiendo bien los adaptadores, ya que ahi me indica el fallo, como debo hacer para que rellenar de nuevo el adaptador con datos diferentes?
Nota: Se que no esta nada optimizado pero preferia hacerlo asi y una vez me funcionara ir cambiando cosas.
Como aqui puede ser muy incomodo de leer, subi el archivo java a la nube, que es mas sencillo de ver en android studio:
http://goo.gl/pcqHLs (enlace a mega)
Dejo el codigo completo comentado:
package com.example.nayime.myapplication;
import android.content.Intent;
import android.content.res.Resources;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class primeratandapreguntas extends ActionBarActivity {
private TextView pregunta;
private ListView listapreguntas;
private int control = 1;//Este se encarga de que cada vez que hago todo sube uno y al llegar a 6 abro la siguiente activity
private int evaluacion = 0;//Le cambio el valor segun la pregunta, para averigurar si es verdad
private int acumulador = 0;//Almacena el numero de aciertos
override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_primeratandapregu ntas);
//localizo los controles
listapreguntas = (ListView) findViewById(R.id.listview1);
pregunta = (TextView) findViewById(R.id.preguntaprimacti);
//Pongo el texto de inicio
pregunta.setText("Pregunta numero "+control+" : ¿Como se llama el anime en el que aparece Lelouch?");
//Creo un String
final String[] datos =
new String[]{"Elfen Lied", "El señor de los anillos", "Code Geass", "Bokurano"};
evaluacion = 2;//Como la respuesta correcta es la 3º, sabiendo que el 3º valor es 2 en el array
//Creo el adaptador y le paso los datos
final ArrayAdapter<String> adaptador =
new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, datos);
//Inicializo el adaptador? No lo tengo claro
listapreguntas.setAdapter(adaptador);
control++;//Incremento la variable de control
listapreguntas.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
//Registro que pulsa, recupero la posicion que pulso y la comparo si es correcta sumo y sino nada, tambien pondre un toast para decir que acerto o no mas adelante
int cable = (int) listapreguntas.getItemAtPosition(position);
if (cable == evaluacion) {
//hacer el toast diciendo que acerto la pregunta.
acumulador++;
} else {
//hacer toast de que fallo la pregunta.
}
//Aqui cuando tras pular el boton llegue a 6, saltare a la siguiente activity, sino repito el mismo ciclo
if (control < 6) {
// Hago un case para seleccionar la opcion, aqui es donde lo hago mal.
//Lo que quiero hacer es cambiar lo que muestra el TextView y el ListView cada vez que pulsa el boton
switch (control){
case 2:
pregunta.setText("Pregunta numero "+control+" : ¿Quién es Kira Yamato??");
final String[] datos =
new String[]{"Dios", "Protagonista de Gundam Seeds", "No existe", "Protagonista de Heroic Age"};
evaluacion = 3;
listapreguntas.setAdapter(adaptador);
control++;
break;
//Aqui no me da fallo
case 3:
pregunta.setText("Pregunta numero "+control+" : ¿Quién es Loquesea??");
final String[] datos = {"Diodfas", "Protagonista de Gundam Sedadfaeds", "No exdafiste", "Prdddotagonista de Heroic Age"};
//Me marca en rojo datos y me dice "Variable 'datos' is already defined.
evaluacion = 2;
listapreguntas.setAdapter(adaptador);
control++;
break;
case 4:
pregunta.setText("Pregunta numero "+control+" : ¿Quién es Loqueseacase4??");
final String[] datos = {"Dioddfas", "Protagaddonista de Gundam Sedadfaeds", "No ddexdafiste", "Prdddotagdfasonista de Heroic Age"};
//Me marca en rojo datos y me dice "Variable 'datos' is already defined.
evaluacion = 0;
listapreguntas.setAdapter(adaptador);
control++;
break;
case 5:
pregunta.setText("Pregunta numero "+control+" : ¿Quién es Loqueseacase5??");
final String[] datos = {"Dioddffas", "Protagonista de Gundam Sedfffadfaeds", "No exdafisffffte", "Prdddotagdonista de Heroic Age"};
//Me marca en rojo datos y me dice "Variable 'datos' is already defined.
evaluacion = 1;
listapreguntas.setAdapter(adaptador);
control++;
break;
}
} else {
Intent intentprimati = new Intent(primeratandapreguntas.this, segundatanda.class);
//falta ojo
//Creamos la información a pasar entre actividades
Bundle b = new Bundle();
b.putInt("acumulador", acumulador);
//Añadimos la información al intent
intentprimati.putExtras(b);
//Iniciamos la nueva actividad
startActivity(intentprimati);
}
}
});
}
}
La idea de la aplicacion es sencilla, hacer una aplicacion de tipo quiz.
Se trata de un textview y luego un listview, en el textview quiero aparecera la pregunta, en el listview las respuestas.
Lo que quiero hacer es que cuando selecciones 1 opcion, le saldra un toast en plan acertaste o no, y a continuación, cambiar los datos mostrados en el textview y el listview por la 2º pregunta y respuestas, ahi es donde me falla.
Mi problema esta en que creo que no entiendo bien los adaptadores, ya que ahi me indica el fallo, como debo hacer para que rellenar de nuevo el adaptador con datos diferentes?
Nota: Se que no esta nada optimizado pero preferia hacerlo asi y una vez me funcionara ir cambiando cosas.
Como aqui puede ser muy incomodo de leer, subi el archivo java a la nube, que es mas sencillo de ver en android studio:
http://goo.gl/pcqHLs (enlace a mega)
Dejo el codigo completo comentado:
package com.example.nayime.myapplication;
import android.content.Intent;
import android.content.res.Resources;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class primeratandapreguntas extends ActionBarActivity {
private TextView pregunta;
private ListView listapreguntas;
private int control = 1;//Este se encarga de que cada vez que hago todo sube uno y al llegar a 6 abro la siguiente activity
private int evaluacion = 0;//Le cambio el valor segun la pregunta, para averigurar si es verdad
private int acumulador = 0;//Almacena el numero de aciertos
override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_primeratandapregu ntas);
//localizo los controles
listapreguntas = (ListView) findViewById(R.id.listview1);
pregunta = (TextView) findViewById(R.id.preguntaprimacti);
//Pongo el texto de inicio
pregunta.setText("Pregunta numero "+control+" : ¿Como se llama el anime en el que aparece Lelouch?");
//Creo un String
final String[] datos =
new String[]{"Elfen Lied", "El señor de los anillos", "Code Geass", "Bokurano"};
evaluacion = 2;//Como la respuesta correcta es la 3º, sabiendo que el 3º valor es 2 en el array
//Creo el adaptador y le paso los datos
final ArrayAdapter<String> adaptador =
new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, datos);
//Inicializo el adaptador? No lo tengo claro
listapreguntas.setAdapter(adaptador);
control++;//Incremento la variable de control
listapreguntas.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
//Registro que pulsa, recupero la posicion que pulso y la comparo si es correcta sumo y sino nada, tambien pondre un toast para decir que acerto o no mas adelante
int cable = (int) listapreguntas.getItemAtPosition(position);
if (cable == evaluacion) {
//hacer el toast diciendo que acerto la pregunta.
acumulador++;
} else {
//hacer toast de que fallo la pregunta.
}
//Aqui cuando tras pular el boton llegue a 6, saltare a la siguiente activity, sino repito el mismo ciclo
if (control < 6) {
// Hago un case para seleccionar la opcion, aqui es donde lo hago mal.
//Lo que quiero hacer es cambiar lo que muestra el TextView y el ListView cada vez que pulsa el boton
switch (control){
case 2:
pregunta.setText("Pregunta numero "+control+" : ¿Quién es Kira Yamato??");
final String[] datos =
new String[]{"Dios", "Protagonista de Gundam Seeds", "No existe", "Protagonista de Heroic Age"};
evaluacion = 3;
listapreguntas.setAdapter(adaptador);
control++;
break;
//Aqui no me da fallo
case 3:
pregunta.setText("Pregunta numero "+control+" : ¿Quién es Loquesea??");
final String[] datos = {"Diodfas", "Protagonista de Gundam Sedadfaeds", "No exdafiste", "Prdddotagonista de Heroic Age"};
//Me marca en rojo datos y me dice "Variable 'datos' is already defined.
evaluacion = 2;
listapreguntas.setAdapter(adaptador);
control++;
break;
case 4:
pregunta.setText("Pregunta numero "+control+" : ¿Quién es Loqueseacase4??");
final String[] datos = {"Dioddfas", "Protagaddonista de Gundam Sedadfaeds", "No ddexdafiste", "Prdddotagdfasonista de Heroic Age"};
//Me marca en rojo datos y me dice "Variable 'datos' is already defined.
evaluacion = 0;
listapreguntas.setAdapter(adaptador);
control++;
break;
case 5:
pregunta.setText("Pregunta numero "+control+" : ¿Quién es Loqueseacase5??");
final String[] datos = {"Dioddffas", "Protagonista de Gundam Sedfffadfaeds", "No exdafisffffte", "Prdddotagdonista de Heroic Age"};
//Me marca en rojo datos y me dice "Variable 'datos' is already defined.
evaluacion = 1;
listapreguntas.setAdapter(adaptador);
control++;
break;
}
} else {
Intent intentprimati = new Intent(primeratandapreguntas.this, segundatanda.class);
//falta ojo
//Creamos la información a pasar entre actividades
Bundle b = new Bundle();
b.putInt("acumulador", acumulador);
//Añadimos la información al intent
intentprimati.putExtras(b);
//Iniciamos la nueva actividad
startActivity(intentprimati);
}
}
});
}
}