PDA

Ver la Versión Completa : [ SOLUCIONADO ] layout_weight


Merche300
03/02/17, 14:30:15
Tengo un problema, tengo dos parsers en un mismo activity,

for (int j = 0; j < contacts1.length(); j++) {
JSONObject d = contacts1.getJSONObject(j);

String dorsal_local = d.getString("dorsal") + " - ";
String nombre_local = d.getString("nombre");

// tmp hash map for single contact
HashMap<String, String> contact1 = new HashMap<>();

// adding each child node to HashMap key => value
contact1.put("dorsal_local",dorsal_local);
contact1.put("nombre_local",nombre_local);

// adding contact to contact list
contactList.add(contact1);

}


for (int k = 0; k < contacts2.length(); k++) {
JSONObject e = contacts2.getJSONObject(k);

String dorsal_visi = e.getString("dorsal") + " - ";
String nombre_visi = e.getString("nombre");

// tmp hash map for single contact
HashMap<String, String> contact2 = new HashMap<>();

// adding each child node to HashMap key => value
contact2.put("dorsal_visi",dorsal_visi);
contact2.put("nombre_visi",nombre_visi);

// adding contact to contact list
contactList.add(contact2);
}Los cuales los envio para visualizar en un mismo listview:

ListAdapter adapter1 = new SimpleAdapter( DetailActivity.this, contactList,
R.layout.titulares_row,
new String[]{"dorsal_local", "nombre_local", "dorsal_visi", "nombre_visi"},
new int[]{R.id.tv_dorsal_local, R.id.tv_titulares_local,R.id.tv_dorsal_visi, R.id.tv_titulares_visi});

lv1.setAdapter(adapter1);Hasta ahi todo correcto, pero, lo que intento es que se vean en el listview el dorsal_local, nombre_local, dorsal_visitante y nombre_visitante en una misma linea y lo que me ocurre es que me muestra, dorsal y nombre de los locales y al finalizar todos es cuando empiezan a salir el dorsal y el nombre visitante.

titulares_row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content""
android:orientation="horizontal"
android:paddingBottom="5dp"
android:paddingTop="5dp"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp">

<TextView
android:id="@+id/tv_dorsal_local"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textColor="@color/primaryColor"
android:textSize="16sp"
android:text="DL"
android:gravity="left|center_vertical"
android:minLines="3"/>

<TextView
android:id="@+id/tv_titulares_local"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="5"
android:textColor="@color/primaryColor"
android:textSize="16sp"
android:gravity="center_vertical"
android:text="local"
android:minLines="3"/>

<TextView
android:id="@+id/tv_dorsal_visi"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textColor="@color/primaryColor"
android:textSize="16sp"
android:text="DV"
android:gravity="left|center_vertical"
android:minLines="3"/>

<TextView
android:id="@+id/tv_titulares_visi"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="5"
android:textColor="@color/primaryColor"
android:textSize="16sp"
android:gravity="center_vertical"
android:text="Visitante"
android:minLines="3"/>

</LinearLayout>Alguna solucion?
Gracias

mocelet
03/02/17, 17:12:25
Hace lo que le estás indicando, primero filas que solo tienen texto en dorsal_local y nombre_local (primer bucle) y luego filas que solo tienen texto en dorsal_visi y nombre_visi (segundo bucle)

Si quieres que salga todo en la misma fila tendrás que añadir las cosas de visitante al mismo "contact" donde guardaste el local en el primer bucle.

P.D: Vamos, que no es problema de weights ni nada, las filas tienen cuatro campos, pero en la primera mitad los dos últimos están vacíos y no los ves. Y en la segunda mitad están vacíos los dos primeros

Merche300
03/02/17, 17:19:36
Hace lo que le estás indicando, primero filas que solo tienen texto en dorsal_local y nombre_local (primer bucle) y luego filas que solo tienen texto en dorsal_visi y nombre_visi (segundo bucle)

Si quieres que salga todo en la misma fila tendrás que añadir las cosas de visitante al mismo "contact" donde guardaste el local en el primer bucle.

P.D: Vamos, que no es problema de weights ni nada, las filas tienen cuatro campos, pero en la primera mitad los dos últimos están vacíos y no los ves. Y en la segunda mitad están vacíos los dos primeros

se queda igual mocelet
ya lo hice antes asi dentro de cada *for, con los *contact1


HashMap<String, String> contact1 = new HashMap<>();

// adding each child node to HashMap key => value
contact1.put("dorsal_visi",dorsal_visi);
contact1.put("nombre_visi",nombre_visi);

// adding contact to contact list
contactList.add(contact1);

mocelet
03/02/17, 17:27:12
No nos hemos entendido :D El problema es que llamas una vez al contactList.add para los locales y eso es como si fuera una fila nueva ya. Así que nunca vas a tener los visitantes al lado.

Al .add solo puedes llamarlo cuando tengas los cuatro valores guardados, es decir, en algún sitio debes tener esto:


contact.put("dorsal_local",dorsal_local);
contact.put("nombre_local",nombre_local);
contact.put("dorsal_visi",dorsal_visi);
contact.put("nombre_visi",nombre_visi);
contactList.add(contact);


Tienes que juntar los dos bucles en uno.

Merche300
03/02/17, 17:30:01
No nos hemos entendido :D El problema es que llamas una vez al contactList.add para los locales y eso es como si fuera una fila nueva ya. Así que nunca vas a tener los visitantes al lado.

Al .add solo puedes llamarlo cuando tengas los cuatro valores guardados, es decir, en algún sitio debes tener esto:

contact.put("dorsal_local",dorsal_local);
contact.put("nombre_local",nombre_local);
contact.put("dorsal_visi",dorsal_visi);
contact.put("nombre_visi",nombre_visi);
contactList.add(contact);Tienes que juntar los dos bucles en uno.

Gracias voy a provar

Merche300
03/02/17, 17:34:27
No nos hemos entendido :D El problema es que llamas una vez al contactList.add para los locales y eso es como si fuera una fila nueva ya. Así que nunca vas a tener los visitantes al lado.

Al .add solo puedes llamarlo cuando tengas los cuatro valores guardados, es decir, en algún sitio debes tener esto:


contact.put("dorsal_local",dorsal_local);
contact.put("nombre_local",nombre_local);
contact.put("dorsal_visi",dorsal_visi);
contact.put("nombre_visi",nombre_visi);
contactList.add(contact);Tienes que juntar los dos bucles en uno.

no esta puesto?

contact1.put("dorsal_local",dorsal_local); contact1.put("nombre_local",nombre_local);


aaa ok juntos gracias

mocelet
03/02/17, 17:37:58
Ya no hay contact1 y contact2, es un único contact (que no sé por qué lo llamas así de todas formas) que contiene los cuatro atributos (dos que has sacado de un json y dos que has sacado de otro)

Ten en cuenta que cada contact que añadas a contactList va a convertirse en una fila, así que tienes que escribir los cuatro campos antes de añadirlo.

Merche300
03/02/17, 17:40:22
Ya no hay contact1 y contact2, es un único contact (que no sé por qué lo llamas así de todas formas) que contiene los cuatro atributos (dos que has sacado de un json y dos que has sacado de otro)

Ten en cuenta que cada contact que añadas a contactList va a convertirse en una fila, así que tienes que escribir los cuatro campos antes de añadirlo.

Gracias, lo entiendo, voy a ver que sale.

Merche300
04/02/17, 08:32:40
nada no me sale

mocelet
04/02/17, 09:12:55
Básicamente es copiar y pegar lo del segundo bucle en el primero cambiando algún nombre de variable, debería ser algo así, suponiendo que contacts1 y contacts2 tengan el mismo número de elementos.


for (int i = 0; i < contacts1.length(); i++) {
JSONObject d = contacts1.getJSONObject(i);
JSONObject e = contacts2.getJSONObject(i);
String dorsal_local = d.getString("dorsal") + " - ";
String nombre_local = d.getString("nombre");
String dorsal_visi = e.getString("dorsal") + " - ";
String nombre_visi = e.getString("nombre");

HashMap<String, String> contact = new HashMap<>();
contact.put("dorsal_local",dorsal_local);
contact.put("nombre_local",nombre_local);
contact.put("dorsal_visi",dorsal_visi);
contact.put("nombre_visi",nombre_visi);
contactList.add(contact);
}

Merche300
04/02/17, 09:34:45
Vaya tela, no se las horas que me he tirado, no se como lo hacia pero solo me salia el ultimo item decada lista. Me confundian los contacts 1 - 2, voy a cambiar los nombre.
gracias