一.ListView的事件:
創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、成都網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)三明,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢(xún)建站服務(wù):028-86922220
1.setOnItemClickListener()點(diǎn)擊事件
listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView> parent, View view, int position, long id) { Toast.makeText(ArrayAdapterActivity.this, "你點(diǎn)擊了第"+(position+1)+"項(xiàng)", Toast.LENGTH_SHORT).show(); } });
2.setOnItemLongClickListener()長(zhǎng)按事件,設(shè)置“長(zhǎng)按”listview某一項(xiàng)的監(jiān)聽(tīng)事件。
listview.setOnItemLongClickListener( OnItemLongClickListener() { @Override onItemLongClick(AdapterView> parent, View view, position, id) { Toast.makeText(ArrayAdapterActivity., "你了第"+(position+1)+"項(xiàng)", Toast.LENGTH_SHORT).show(); ; } });
二.ListView由于item項(xiàng)中包含某些可以搶焦點(diǎn)的控件導(dǎo)致無(wú)法獲取焦點(diǎn)問(wèn)題:
(注意:ListView的項(xiàng)根元素layout的寬要設(shè)置成android:layout_width="fill_parent",否則可能會(huì)因?yàn)轫?xiàng)內(nèi)容太短,導(dǎo)致點(diǎn)擊時(shí)獲取不到焦點(diǎn))
1>.如果你自定義ListView的項(xiàng)中包含能獲得焦點(diǎn)的子控件(RadioGroup、Button、CheckBox、DatePicker、ImageButton、ScrollView、SeekBar、EditText、ToggleButton、RatingBar等)的話(huà),默認(rèn)焦點(diǎn)會(huì)被交給這些子控件,而ListView的項(xiàng)能被選中的基礎(chǔ)是它能獲取焦點(diǎn),所以項(xiàng)中的這些子控件的焦點(diǎn)必須為false,這樣ListView的項(xiàng)才能獲取onItemLongClick事件與onItemClick事件
解決辦法(以Button為例):
在布局文件中,在項(xiàng)的layout布局文件根元素中加入android:descendantFocusability="blocksDescendants"如:
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants" >
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/header"
android:layout_toRightOf="@id/header" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/name"
android:layout_below="@id/name" />
android:id="@+id/delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="@string/deleteselect" />
如果layout是程序動(dòng)態(tài)生成的,則調(diào)用
layout.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
2>.如果你自定義ListView的項(xiàng)中包含能獲得焦點(diǎn)的子控件GridView的話(huà),默認(rèn)焦點(diǎn)會(huì)被交給這些子控件,而ListView的項(xiàng)能被選中的基礎(chǔ)是它能獲取焦點(diǎn),所以項(xiàng)中的這些子控件的焦點(diǎn)必須為false,這樣ListView的項(xiàng)才能獲取onItemLongClick事件與onItemClick事件
解決辦法(以Button為例):
1.在布局文件中,在項(xiàng)的layout布局文件根元素中加入
android:descendantFocusability="blocksDescendants"
2.程序中給GridView進(jìn)行如下設(shè)置
gridView.setClickable(false); gridView.setPressed(false); gridView.setEnabled(false);
三.ListView的UI顯示中常見(jiàn)問(wèn)題及解決辦法
1>如果需求是listview點(diǎn)擊時(shí),item無(wú)背景變色效果
步驟:
1.drawable文件夾中新建timer_list_selector.xml內(nèi)容如下
2.values文件夾中新建colors.xml內(nèi)容如下
#50000000
3.布局文件中給listview加入如下屬性
android:listSelector="@drawable/timer_list_selector"
2>listview設(shè)置分割線(xiàn)Divider樣式,布局文件給listview加入如下屬性(已分隔符為顏色為例)
android:divider屬性用來(lái)設(shè)置分割線(xiàn)顏色(或圖片),當(dāng)設(shè)置為#00000000時(shí)表示item之間無(wú)間隙;
通過(guò)android:dividerHeight屬性設(shè)置分割線(xiàn)高度
android:divider="#ff999999" android:dividerHeight="1sp"
3>UI展現(xiàn)時(shí)常見(jiàn)問(wèn)題
問(wèn)題1:listview設(shè)置背景,拖動(dòng)listview時(shí)顯示黑色,只有拖動(dòng)完才會(huì)顯示我們?cè)O(shè)置的背景顏色或圖片
產(chǎn)生原因:listview的背景是固定不變的,默認(rèn)Listview的每項(xiàng)的背景是透明的,拖動(dòng)滾動(dòng)條的過(guò)程中需要實(shí)時(shí)將每個(gè)項(xiàng)的顯示內(nèi)容跟背景進(jìn)行混合運(yùn)算,android系統(tǒng)為了優(yōu)化這個(gè)過(guò)程,使用了android:cacheColorHint屬性,在黑色背景下默認(rèn)顏色為#191919,所以出現(xiàn)了上面的黑色顯示問(wèn)題
解決辦法:(根據(jù)需求而定)
1.如果只換背景顏色:將android:cacheColorHint設(shè)置成和背景顏色一樣或android:scrollingCache="false"如下
android:cacheColorHint="#ff00ff00" android:background="#ff00ff00"
或
android:scrollingCache="false" android:background="#ff00ff00"
2.如果用圖片做背景:將android:cacheColorHint設(shè)為#00000000變?yōu)橥该骰騛ndroid:scrollingCache="false"即可如下
android:cacheColorHint="#00000000" android:background="@drawable/ic_launcher"
或
android:scrollingCache="false" android:background="@drawable/ic_launcher"
問(wèn)題2:listview上面或下面有黑色陰影
解決辦法:布局文件中給listview加入android:fadingEdge="none"
UI總結(jié):
綜上問(wèn)題得到最終的布局為(帶分割線(xiàn)+背景色)