Inflater和循环不能正常工作

时间:2012-12-21 02:29:11

标签: java android eclipse loops

我正在使用自定义视图的问题我正在为Android上的应用程序做,我知道有很多与inflaters相关的问题,但我无法解决这个问题。

inflater我工作得很好,但是它应该循环3次并且只做1次所以我只得到一个最终布局的视图。

代码的相关部分是这一个

 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();

}

1 个答案:

答案 0 :(得分:3)

你看起来只需要在膨胀的视图上运行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。

这有意义吗?

更新2:

致电时:

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

您已将父视图设置为第二个参数,因此您无需调用:

lLfD.addView(child);