程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> loops-Inflater和循環不起作用

loops-Inflater和循環不起作用

編輯:編程綜合問答
Inflater和循環不起作用

在我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);
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved