之前有问过:
http://topic.csdn.net/u/20110715/10/2161227a-30f8-4572-be42-887227010014.html
得到的答复是:
ListView listView = (ListView)findViewById(R.id.配置文件中ListView的ID);  
     //全选遍历ListView的选项,每个选项就相当于布局配置文件中的RelativeLayout  
     for(int i = 0; i < listView.getChildCount(); i++){  
         View view = listView.getChildAt(i);  
         CheckBox cb = (CheckBox)view.findViewById(R.id.配置文件中CheckBox的ID);  
         cb.setChecked(true);  
     }  
现在的问题是,我遍历的是TextView,但是当这个TextView里面文本太长的话,findViewById就会出错,
为什么呢?

解决方案 »

  1.   

    比如说listview里面有5个ITEM,
    TextView tv = (TextView)listView.getChildAt(i).findViewById(R.id.配置文件中CheckBox的ID); i=0的时候,就是第一行,不会出错,后面就全是java.null......
      

  2.   

    为啥不使用Adapter呢?
    ArrayAdapter<String> adapter = (ArrayAdapter<String>)list.getAdapter();
    然后遍历adapter即可
      

  3.   

    楼上的,adapter一样可以遍历到所有控件吗? 怎么做? 谢谢
      

  4.   


    R.id.配置文件中CheckBox的ID? 转化成 TextView? 
      

  5.   

    同一个组件不能拥有两个或者两个以上的父组件
    lz可能会问为什么i == 0时不报空?此时的listView和listView.getChildAt(i)是同一个组件同一个对象
       
      

  6.   

    也许你extends ListActivity 那ListView的id便要设置为android:id = "@+id/android:list"
    你试试。
      

  7.   

    正问题我正好遇到了。 listView.getChildAt(i) 函数,如果这个位置为i的child view 还没有显示在界面上,那么就会返回null,导致错误。
      

  8.   

    通过adapter和viewholder可以定位到你所选的那个view然后进行操作即可。楼主的意思是不是点击listview一行,选中那个checkbox然后对选中的这行进行操作吗?
      

  9.   

    所以说应该是这样的,显示的数据和数据内容要分离开,这样就不会受界面显示的限制了。
    那么adapter的这种方式就很好
      

  10.   

    我现在是在listview中放置的textview,需求是通过手势或者按钮来缩放字体。
    用adapter是可以遍历到,但是给textview设置字体是不起作用的。用这个:
    TextView tv = (TextView)listView.getChildAt(i).findViewById(R.id.配置文件中CheckBox的ID); 当文本太长的时候会出错
      

  11.   

    楼主可能是父子关系没搞清楚吧,view.findViewById()这个函数只能找到view的儿子,不能找到view的孙子,必须通过儿子再去找孙子。
    例如:
    <LinearLayout id=1>
      <TextView/ id=2>
      <LinearLayout id=3>
      <TextView/ id=4>
      
    </LinearLayout>
    </LinearLayout>
    1只能找到2和3,不能找到4,必须先找到3,通过3才能找到4.