大家好,又见面了,我是你们的朋友全栈君。
很多时候,在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()方法了
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160583.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...