|
||
|
![]() |
![]() |
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
Herramientas |
#1
|
||||
|
||||
Problema con adaptador en java
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); } } }); } } Última edición por himorino Día 22/02/15 a las 17:37:03. |
|
#2
|
||||
|
||||
La misión del Adapter es crear las Views que vas a usar en el ListView y rellenarlas de contenido, a ser posible usando reciclado. Se ve mucho más claro en el Adapter del nuevo RecyclerView, el cual recomiendo muy por encima del antiguo ListView, al tener un sin fin de posibilidades, algunas de ellas que sólo se podían conseguir con librerías externas, como un ListView Horizontal con reciclado.
Básicamente tienes que hacer que el Adapter lea de alguna fuente de datos, y que su número de elementos y su contenido dependa de esa fuente de datos. Si luego quieres modificar el contenido lo único que tienes que hacer es modificar los elementos de la fuente de datos y llamar a notifyDataSetChanged() y el contenido cambiará automáticamente. |
#3
|
||||
|
||||
Pero lo que me comentas tendria que hacer la aplicacion compilada con la API de Android L no? Lo estoy haciendo para 4.0.3 Ice Cream Sandwich en adelante.
|
#5
|
||||
|
||||
Vale gracias, pues luego buscare información acerca de el, estuve antes ojeando y lo vi solo referido a Android 5.0 por eso me asuste un poco, pero no vi apenas en español, si sabes de algun sitio donde se explique bien lo agradeceria.
|
![]() |
![]() |
||||||
|
Herramientas | |