本文來(lái)源:終端研發(fā)部? listView面試匯總忘巧,應(yīng)用開發(fā)者必須掌握的基本知識(shí)
1.首先是stackFromBottom屬性朱灿,值為true和false
stackFromBottom="true"????? 從下到上依次填充listview
stackFromBottom="false":? 從上到下依次填充listview
2.第二是transciptMode屬性,需要用ListView或者其它顯示大量Items的控件實(shí)時(shí)跟蹤或者查看信息债朵,并且希望最新的條目可以自動(dòng)滾動(dòng)到可視范圍內(nèi)。通過設(shè)置的控件transcriptMode屬性可以將Android平臺(tái)的控件(支持ScrollBar)自動(dòng)滑動(dòng)到最底部芥喇。
android:transcriptMode="alwaysScroll"
3.第三cacheColorHint屬性使套,很多人希望能夠改變一下它的背景罐呼,使他能夠符合整體的UI設(shè)計(jì),改變背景背很簡(jiǎn)單只需要準(zhǔn)備一張圖片然后指定屬性
android:background="@drawable/bg"
不過不要高興地太早侦高,當(dāng)你這么做以后嫉柴,發(fā)現(xiàn)背景是變了,但是當(dāng)你拖動(dòng)奉呛,或者點(diǎn)擊list空白位置的時(shí)候發(fā)現(xiàn)ListItem都變成黑色的了计螺,破壞了整體效果。
如果你只是換背景的顏色的話瞧壮,可以直接指定android:cacheColorHint為你所要的顏色登馒,如果你是用圖片做背景的話,那也只要將
android:cacheColorHint
指定為透明(#00000000)就可以了
4.第四divider屬性咆槽,該屬性作用是每一項(xiàng)之間需要設(shè)置一個(gè)圖片做為間隔陈轿,或是去掉item之間的分割線
android:divider="@drawable/list_driver"其中 @drawable/list_driver 是一個(gè)圖片資源,如果不想顯示分割線則只要設(shè)置為@null就可以了
5.第五fadingEdge屬性秦忿,上邊和下邊有黑色的陰影
android:fadingEdge="none"
設(shè)置后沒有陰影了~
6.第六scrollbars屬性麦射,作用是隱藏listView的滾動(dòng)條
android:scrollbars="none"
與setVerticalScrollBarEnabled(true);的效果是一樣的,不活動(dòng)的時(shí)候隱藏灯谣,活動(dòng)的時(shí)候也隱藏
7.第七是fadeScrollbars屬性
android:fadeScrollbars="true"
配置ListView布局的時(shí)候潜秋,設(shè)置這個(gè)屬性為true就可以實(shí)現(xiàn)滾動(dòng)條的自動(dòng)隱藏和顯示。
8.第八drawSelectorOnTop屬性
官方文檔描述:
When
set to true, the selector will be drawn over the selecteditem.
Otherwise the selector is drawn behind the selected item. Thedefault
value is false.
android:drawSelectorOnTop="true"
點(diǎn)擊某一條記錄胎许,顏色會(huì)顯示在最上面峻呛,記錄上的文字被遮住,所以點(diǎn)擊文字不放辜窑,文字就看不到
android:drawSelectorOnTop="false
一些常見的屬性:
android:listSelector=”@color/pink” //item選中時(shí)的顏色默認(rèn)為橙黃底色钩述。
android:divider=”#f9b68b” //分割線顏色
android:dividerHeight=”1dp” //分割線邊距
android:scrollbars=”none” //不顯示滾動(dòng)條
android:fadingEdge=”none” //去掉上邊和下邊黑色的陰影
android:divider=”#00000000”//設(shè)置Item之間無(wú)間隙
listView.setDividerHeight(0);//在javaCode中如下定義設(shè)置Item之間無(wú)間隙
android:divider=”@drawable/list_driver” //設(shè)置分割線的圖片資源
android:divider=”@drawable/@null” //不想顯示分割線
android:scrollbars=”none”//沒有滾動(dòng)條 -setVerticalScrollBarEnabled(true); //隱藏listView的滾動(dòng)條
android:fadeScrollbars=”true” //設(shè)置為true就可以實(shí)現(xiàn)滾動(dòng)條的自動(dòng)隱藏和顯示
寫在最后:
ListView 中圖片錯(cuò)位的問題是如何產(chǎn)生的?(原因是異步加載及對(duì)象被復(fù)用造成的)
圖片錯(cuò)位問題的本質(zhì)源于我們的 listview 使用了緩存 convertView谬擦,假設(shè)一種場(chǎng)景切距,一個(gè) listview一屏顯示九個(gè) item,那么在拉出第十個(gè) item 的時(shí)候惨远,事實(shí)上該 item 是重復(fù)使用了第一個(gè) item谜悟,也就是說(shuō)在第一個(gè) item 從網(wǎng)絡(luò)中下載圖片并最終要顯示的時(shí)候,其實(shí)該 item 已經(jīng)不在當(dāng)前顯示區(qū)域內(nèi)了北秽,此時(shí)顯示的后果將可能在第十個(gè) item 上輸出圖像葡幸,這就導(dǎo)致了圖片錯(cuò)位的問題。
解決辦法之一:
每次getView能給對(duì)象一個(gè)標(biāo)識(shí)贺氓,在異步加載完成時(shí)比較標(biāo)識(shí)與當(dāng)前行item的標(biāo)識(shí)是否一致蔚叨,一致則顯示,否則不做處理即可。
以使用imageloader為例子
holder.img_goods.setTag(url);
// 添加一個(gè)加載圖片的監(jiān)聽
imageLoader.displayImage(url, holder.img_goods, options, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String s, View view) {
finalHolder.img_goods.setImageResource(R.mipmap.default);
}
@Override
public void onLoadingFailed(String s, View view, FailReason failReason) {
finalHolder.img_goods.setImageResource(R.mipmap.default);
}
@Override
public void onLoadingComplete(String s, View view, Bitmap bitmap) {
if (url.equals(finalHolder.img_goods.getTag())) {
finalHolder.img_goods.setImageBitmap(bitmap);
}
}
@Override
public void onLoadingCancelled(String s, View view) {
finalHolder.img_goods.setImageResource(R.mipmap.default);
}
});