您好,登錄后才能下訂單哦!
一.ListView的事件:
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"如:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants" >
<ImageView
android:id="@+id/header"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/header"
android:layout_toRightOf="@id/header" />
<TextView
android:id="@+id/age"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/name"
android:layout_below="@id/name" />
<Button
android:id="@+id/delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="@string/deleteselect" />
</RelativeLayout>
如果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)容如下
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_selected="true" android:drawable="@color/transparent"/></selector>
2.values文件夾中新建colors.xml內(nèi)容如下
<?xml version="1.0" encoding="utf-8"?><resources> <color name="transparent">#50000000</color></resources>
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)+背景色)
<ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="180dip" android:divider="#ff999999" android:dividerHeight="1sp" android:fadingEdge="none" android:scrollingCache="false" android:background="#ff00ff00" />
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。