2014-10-17 69 views
0

在我的项目中,我从服务器获取30个需求。我已将所有内容显示在CheckBox中。所以根据在循环内部创建CheckBox的需求大小。我也为复选框设置ID。再次,我从服务器获取Id,并将相同的Id设置为CheckBoxes。当我尝试获取CheckBox的Id时遇到困难

for(int i=0;i<require.size();i++) 
    { 
     //From Requirements 
     requirement=require.get(i); 
     RelativeLayout rl1 = new RelativeLayout(getActivity()); 
     rl1.setBackgroundResource(R.drawable.listviewdesign); 
     l1.setOrientation(LinearLayout.VERTICAL); 
     req1 = new CheckBox(getActivity()); 
     rl1.addView(req1); 
     req1.setId(Integer.parseInt(requirement.r_id)); 
     Log.i("getid",Integer.toString(req1.getId())); 
     li.add(Integer.toString(req1.getId())); 
    } 

现在问题是30个CheckBoxes中只有2个CheckBoxes被检查。我已收到来自服务器的5个CheckBoxes标识。我还将2个CheckBoxes Id与上面的CheckBoxes Id进行了比较。这里的问题是第二个CheckBox只设置为true。第一个CheckBox没有设置为真(2个CheckBox中没有)。我做错了吗?请指导我。

for(int i=0;i<li.size();i++) 
    { 
     //li.get(i); 
     req1 = (CheckBox) container.findViewById(i); 
     String sr = req1.toString(); 
     for(int j=0;j<proj_require1.size();j++) 
     { 
      pr = proj_require1.get(j); 
      if(sr.equals(pr.rid)) 
      { 
       req1.setChecked(!req1.isChecked()); 
      } 
      else 
      { 
       req1.setChecked(req1.isChecked()); 
      } 
     } 
    } 
+0

我不tryied理解你的代码,但设置时,你是他们检查创建它们会容易得多。 – Kai 2014-10-17 05:27:33

+0

@ user714965我是根据项目的种类显示需求。是的基于单个项目检索单个需求很容易。但是,如果我有多个项目,那么我必须显示基于项目的要求。所以这个视图生成与复选框必须改变基于不同的项目 – user3663600 2014-10-17 05:49:10

回答

0

在下面一行:

req1 = (CheckBox) container.findViewById(i);

你确定它的findViewById(i); ?而不是li.get(i)其中li显然是来自服务器的您的ID数组。

即尝试:req1 = (CheckBox) container.findViewById(li.get(i));

此外,如果您比较ID来标识,然后又修改:

String sr = req1.toString();String sr = Integer.toString(req1.getId());

+0

如果我给这个req1 =(CheckBox)container.findViewById(li.get(i));那么它会要求我更改find​​ViewById以查找ViewWithTag。所以只是我有这样的最后一个字符串dd = li.get(i); \t \t \t \t req1 =(CheckBox)container.findViewById(Integer.parseInt(dd));但它在这一行显示NullPointerException req1.setChecked(!req1.isChecked()); – user3663600 2014-10-17 06:25:22

+0

不要将它更改为Tag,它会要求您更改它,可能是因为'li.get(i)'返回一个String,而'findViewById(id)'接收一个int。使用'Integer.parseInt(li.get(i))' – DanyBoricua 2014-10-17 06:33:11

+0

'container'怎么样?什么是容器,你是否将每个RelativeLayouts添加到这种容器?我在循环中看到您创建了一对复选框和RelativeLayout,并将复选框置于RelativeLayout中,但我没有看到您将RelativeLayout放置在其他地方,也许您错过了? – DanyBoricua 2014-10-17 06:36:02