Eiseno 2012-12-21 03:35 采纳率: 100%
浏览 2311
已采纳

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();
}
  • 写回答

1条回答 默认 最新

  • niangzhi 2012-12-21 05:56
    关注

    看起来好像你只是需要在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);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学中在线排序的时间在线排序的在线LPT算法
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧