很多時候,在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()方法了