很多时候,在listview加载数据之后,我们希望默认选中第一项,然后我们在setAdapter之后写上如下代码:
listview.getChildAt(0).setBackgroundResource(R.color.white);
发现程序崩溃:
NullPointerException,事实上,setAdapter() 是异步的 ,调用了这个方法之后 ListView 的 item 并没有立马创建,而是在下一轮消息处理时才创建。
解决办法:使用 post() 提交一个 Runnable() 对象,在 Runnable() 内部来做默认选中这种初始化动作。
<span style="font-size:18px;"> //默认选择第一项
listListview.post(new Runnable() {
@Override
public void run() {
listListview.getChildAt(0).setBackgroundResource(R.color.white);
}
});</span>
假如listView对点击事件不响应,我们可以通过对ItemLayout的根控件设置其android:descendantFocusability=”blocksDescendant”即可,这样ItemLayout就屏蔽了所有子控件获取Focus的权限,不需要针对ItemLayout中的每一个控件重新设置focusable属性了,如此就可以顺利的响应onItemClickListener中的onItenClick()方法了