listview 遍历所有item的问题

edwardfay 2011-07-18 04:35:12
之前有问过:
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就会出错,
为什么呢?
...全文
2247 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
edwardfay 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 aomandeshangxiao 的回复:]
引用 9 楼 fishmen26 的回复:

正问题我正好遇到了。

listView.getChildAt(i) 函数,如果这个位置为i的child view 还没有显示在界面上,那么就会返回null,导致错误。
有可能是这个原因。
[/Quote]

是这个原因,但是不知道怎么解决
muxiaobo123 2011-07-31
  • 打赏
  • 举报
回复
同等结果~
dingshaofengbinbin 2011-07-31
  • 打赏
  • 举报
回复
楼主可能是父子关系没搞清楚吧,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.
傲慢的上校 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 fishmen26 的回复:]

正问题我正好遇到了。

listView.getChildAt(i) 函数,如果这个位置为i的child view 还没有显示在界面上,那么就会返回null,导致错误。
[/Quote]有可能是这个原因。
edwardfay 2011-07-25
  • 打赏
  • 举报
回复
我现在是在listview中放置的textview,需求是通过手势或者按钮来缩放字体。
用adapter是可以遍历到,但是给textview设置字体是不起作用的。

用这个:
TextView tv = (TextView)listView.getChildAt(i).findViewById(R.id.配置文件中CheckBox的ID);



当文本太长的时候会出错

dinjay 2011-07-25
  • 打赏
  • 举报
回复
所以说应该是这样的,显示的数据和数据内容要分离开,这样就不会受界面显示的限制了。
那么adapter的这种方式就很好
----華----飛---- 2011-07-25
  • 打赏
  • 举报
回复
通过adapter和viewholder可以定位到你所选的那个view然后进行操作即可。楼主的意思是不是点击listview一行,选中那个checkbox然后对选中的这行进行操作吗?
fishmen26 2011-07-25
  • 打赏
  • 举报
回复
正问题我正好遇到了。

listView.getChildAt(i) 函数,如果这个位置为i的child view 还没有显示在界面上,那么就会返回null,导致错误。
edwardfay 2011-07-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 fishmen26 的回复:]
正问题我正好遇到了。

listView.getChildAt(i) 函数,如果这个位置为i的child view 还没有显示在界面上,那么就会返回null,导致错误。
[/Quote]

你的怎么解决的?
soft200816 2011-07-22
  • 打赏
  • 举报
回复
给的信息太少,没法定位啊!
sll_docking 2011-07-22
  • 打赏
  • 举报
回复
也许你extends ListActivity 那ListView的id便要设置为android:id = "@+id/android:list"
你试试。
lixuelong 2011-07-22
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!
xinqiqi123 2011-07-21
  • 打赏
  • 举报
回复
同一个组件不能拥有两个或者两个以上的父组件
lz可能会问为什么i == 0时不报空?此时的listView和listView.getChildAt(i)是同一个组件同一个对象
fishmen26 2011-07-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 edwardfay 的回复:]

比如说listview里面有5个ITEM,
TextView tv = (TextView)listView.getChildAt(i).findViewById(R.id.配置文件中CheckBox的ID);

i=0的时候,就是第一行,不会出错,后面就全是java.null......
[/Quote]

R.id.配置文件中CheckBox的ID? 转化成 TextView?
edwardfay 2011-07-18
  • 打赏
  • 举报
回复
楼上的,adapter一样可以遍历到所有控件吗? 怎么做? 谢谢
网络咖啡 2011-07-18
  • 打赏
  • 举报
回复
为啥不使用Adapter呢?
ArrayAdapter<String> adapter = (ArrayAdapter<String>)list.getAdapter();
然后遍历adapter即可
edwardfay 2011-07-18
  • 打赏
  • 举报
回复
比如说listview里面有5个ITEM,
TextView tv = (TextView)listView.getChildAt(i).findViewById(R.id.配置文件中CheckBox的ID);

i=0的时候,就是第一行,不会出错,后面就全是java.null......

80,359

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧