entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Numero de TextView dinamicos

Hola

Mi situación es la siguiente.

Tengo una activity (MainActivity) con su correspondiente main.xlm.
Después de realizar una consulta a una base de datos recibo unos Strings que deseo mostrar en pantalla mediante un TextView. (Se podría usar un ListView pero es no es mi intención, para tener funcionalidad que no viene al caso en un futuro).

Con lo cual, si de la consulta a la BD recibo 5 resultados necesitaré 5 TextView, pero tal vez en otro momento reciba 3 resultados con lo que necesitare 3 TextView.

El problema lo veo que en el main.xml hay que indicar desde el principio los TextView con sus propiedades.

Con lo cual, cual es la manera correcta de hacerlo. Mediante código java directamente en el MainActivity.java?

Un saludo y gracias

0voto

ferbajoo comentado

Hola,
Espero alguien me pueda ayudar.
Necesito hacer algo parecido pero con edittext, tengo un json que me regresa imagen y nombre de equipo a calificar, pero estos variar segun el usuario que ingresa, lo que no consigo es saber como recoger la informacion de los edittext ya que si sigo el proceso como arriba, todos tendrian el mismo nombre y no podria realizar el .gettext() de cada uno.

Me podrian apoyar?

De antemano gracias.

0voto

Peter comentado

@ferbajoo por favor abre una pregunta nueva.

Saludos.

1 Respuesta

2votos

Leonardo-Tadei Puntos227320

Hola Egoitz,

podés agregar los textView programáticamente para tener solo los que te hagan falta según el resultado de la consulta a la DB.

Para esto tenés que crear un Layout relativo con los componentes a agregar, y luego invicarlo para agregarlo al contenedor:

private void addChild(boolean right) {
            LayoutInflater inflater = LayoutInflater.from(this);
            int id = R.layout.unLayout_;
            RelativeLayout relativeLayout = (RelativeLayout) inflater.inflate(id, null, false);
            TextView textView = (TextView) relativeLayout.findViewById(R.id.textViewDate);
            textView.setText(String.valueOf(System.currentTimeMillis()));
            layout.addView(relativeLayout);     
}

Esto funciona pero pero puede dar algunos problemas de visualización en el caso de que no quepan en la pantalla o en el caso de que requieran posicionarse de alguna forma particular. En este enlace se discute esto y las soluciones posibles: http://danielme.com/tip-android-29-layouts-dinamicos-anadir-vistas-programaticamente/

Saludos cordiales!

0voto

egoitz_gonzalez comentado

Gracias Leonardo.

Seguï las instrucciones y casi lo consigo. Tengo un pequeño problema que estoy seguro que es una tontería pero no doy con ello.

Yo recogo un ArrayList y lo voy recorriendo. La intención es listar el contenido del ArrayList en TextViews. Lo que ocurre es que solamente me muestra el último valor del array. El textView se va sobrescribiendo en lugar de creando uno nuevo con un nuevo valor.

Este es mi código:

    //TextView dinamikoentzako metodoak
public void addChild(ArrayList<String> arrayListTipoActividad){
    LayoutInflater inflater = LayoutInflater.from(this);
    int id = R.layout.assistant_lista_actividades_dinamicas;
    RelativeLayout relativeLayout = (RelativeLayout) inflater.inflate(id, null, false);
    int i;
    //recorrer el arrayList e ir mostrando los resultados en el TextView
    for(i=0; i<arrayListTipoActividad.size(); i++){
        TextView textView = (TextView) relativeLayout.findViewById(R.id.assistant_tvactividad);
        textView.setText(arrayListTipoActividad.get(i));
    }

    layout.addView(relativeLayout);
}

0voto

egoitz_gonzalez comentado

Gracias Leonardo.

Seguï las instrucciones y casi lo consigo. Tengo un pequeño problema que estoy seguro que es una tontería pero no doy con ello.

Yo recogo un ArrayList y lo voy recorriendo. La intención es listar el contenido del ArrayList en TextViews. Lo que ocurre es que solamente me muestra el último valor del array. El textView se va sobrescribiendo en lugar de creando uno nuevo con un nuevo valor.

Este es mi código:

        //TextView dinamikoentzako metodoak
public void addChild(ArrayList<String> arrayListTipoActividad){
    LayoutInflater inflater = LayoutInflater.from(this);
    int id = R.layout.assistant_lista_actividades_dinamicas;
    RelativeLayout relativeLayout = (RelativeLayout) inflater.inflate(id, null, false);
    int i;
    //recorrer el arrayList e ir mostrando los resultados en el TextView
    for(i=0; i<arrayListTipoActividad.size(); i++){
        TextView textView = (TextView) relativeLayout.findViewById(R.id.assistant_tvactividad);
        textView.setText(arrayListTipoActividad.get(i));
    }

    layout.addView(relativeLayout);
}

0voto

Leonardo-Tadei comentado

Hola Egoitz,

tenés que hacer un inflate para cada textView nuevo, es decir, pasar el código

RelativeLayout relativeLayout = (RelativeLayout) inflater.inflate(id, null, false)

adentro del bucle for.

De otra forma, estás poniendo el contenido siempre en el mismo textView.

0voto

egoitz_gonzalez comentado

Gracias leonardo. Sabía que era una tontería pero me había ofuscado y no lo veía.
layout.addView(relativeLayout) también debe de ir dentro del for para que todo funcione correctamente.

También funciona si creamos un TextView manualmente. El código sería el siguiente:

        //recorrer el arrayList e ir mostrando los resultados en el TextView
    for(i=0; i<arrayListTipoActividad.size(); i++){
        TextView tvTipoActividad = new TextView(this);
        tvTipoActividad.setText(arrayListTipoActividad.get(i));
        layout.addView(tvTipoActividad);

    }

0voto

Leonardo-Tadei comentado

Es correcto: lo importantes es tener un nuevo textView y no reusar siempre el mismo.
Me alegro de que lo hayas solucionado!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta