在我app上的自定義視圖上有問題,我知道這個很可能是和inflaters有關系,但是我不知道怎麼解決。
inflater剛剛還是好的,但是它應該是做三次循環,現在卻只有一次,這樣在我最終布局上我只能得到一個view
相關部分代碼是下邊這個
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();
}
看起來好像你只是需要在inflated視圖上運行findViewById,否則它只執行你循環語句中的第一條
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);
在你的循環中,findViewById
是這樣:
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)
通過用child.findViewById(R.id.cellAvatar)
,每次執行循環的時候,它保證你能找到正確的R.id.cellAvatar
當你調用:
getLayoutInflater().inflate(R.layout.cellevery, lLfD);
你已經設置了parent view作為第二參數,所以你不需要調用:
lLfD.addView(child);