Inflater y lazo no funciona como debería

Tengo un problema con una vista personalizada que estoy haciendo actualmente para una aplicación en Android, sé que hay muchas preguntas relacionadas con infladores, pero no puedo evitar este problema.

El inflador i funciona muy bien, pero debe estar haciendo el bucle 3 veces y sólo lo está haciendo 1 por lo que sólo obtener una vista en mi diseño final.

La parte relevante del código es ésta

void populate(String strcline, String url){ lLfD = (LinearLayout)findViewById(R.id.lLfD); try{ JSONArray a1 = new JSONArray(strcline); for(int i = 0; i < a1.length(); i++){ JSONArray a2 = a1.getJSONArray(i); final String fUserId = a2.getString(0); String userName = a2.getString(1); String userPicture = url + a2.getString(2); View child = getLayoutInflater().inflate(R.layout.cellevery, lLfD); ImageView avatar = (ImageView)findViewById(R.id.cellAvatar); downloadFile(userPicture, avatar); TextView cellName = (TextView)findViewById(R.id.cellName); cellName.setText(userName); lLfD.addView(child); } }catch(Exception e){ } pDialog.dismiss(); 

}

Parece que necesitas ejecutar findViewById sólo en la vista inflada, de lo contrario sólo encontrará la primera que es sólo la primera en tu bucle:

  View child = getLayoutInflater().inflate(R.layout.cellevery, lLfD); ImageView avatar = (ImageView)child.findViewById(R.id.cellAvatar); downloadFile(userPicture, avatar); TextView cellName = (TextView)child.findViewById(R.id.cellName); cellName.setText(userName); 

Aquí hay una explicación de findViewById en tu bucle:

 Loop 1: 1LfD->child1->R.id.cellAvatar (findViewById(R.id.cellAvatar) finds this one) Loop 2: 1Lfd-> child1->R.id.cellAvatar child2->R.id.cellAvatar (findViewById(R.id.cellAvatar) finds the child1.cellAvatar again) Loop 3: 1LfD-> child1->R.id.cellAvatar child2->R.id.cellAvatar child3->R.id.cellAvatar (findViewById(R.id.cellAvatar) finds the child1.cellAvatar again) 

Utilizando child.findViewById(R.id.cellAvatar) , asegura que encuentre el R.id.cellAvatar correcto para cada ejecución del bucle.

Tiene sentido?

Actualización 2:

Cuando usted llama:

 getLayoutInflater().inflate(R.layout.cellevery, lLfD); 

Ya está configurando la vista principal como el segundo argumento para que no necesite llamar:

 lLfD.addView(child); 
  • Android - Cómo combinar dos ArrayLists
  • Cómo detener / iniciar un servicio que contiene un bucle infinito en la creación
  • ¿Cómo se enlaza música en PyGame Subset para Android?
  • Cómo obtener salida de los comandos de busybox en la aplicación de Android
  • Android Imageswitcher: cambia las imágenes periódicamente?
  • Problema con la reproducción de audio mediante setNextMediaPlayer
  • ¿Cómo iterar este JSON Array usando Java y org.json en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.