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.
- ¿Cómo crear un bucle de actualización / dibujo apropiadamente con opengl android?
- Cómo hacer un bucle ViewPager?
- ¿Cómo enlazar mis archivos de Media Player?
- ¿Cómo actualizar un TextView en una actividad constantemente en un bucle infinito?
- Implementación de un bucle while en android
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();
}
- Android: haga una parte del código cada 5 segundos
- ¿Cuál es el valor de R.id.ImageButton?
- Android mediaplayer loops para siempre en ICS
- Cómo jugar ringtone una vez a través de MediaPlayer?
- Android looping infinito ListView?
- android- puede hacer que un objeto dibujado en un lienzo haga clic
- Animación de repetición de pulsos
- Entender los lazos estrechos de Android / Spin-On-Suspender el error
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);