一.ListView的事件:
創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、成都網(wǎng)站制作、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)三明,十載網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
1.setOnItemClickListener()點擊事件

listview.setOnItemClickListener(new OnItemClickListener() {
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(ArrayAdapterActivity.this, "你點擊了第"+(position+1)+"項", Toast.LENGTH_SHORT).show();
}
});
2.setOnItemLongClickListener()長按事件,設(shè)置“長按”listview某一項的監(jiān)聽事件。

listview.setOnItemLongClickListener( OnItemLongClickListener() {
@Override
onItemLongClick(AdapterView<?> parent, View view,
position, id) {
Toast.makeText(ArrayAdapterActivity., "你了第"+(position+1)+"項", Toast.LENGTH_SHORT).show();
;
}
});
二.ListView由于item項中包含某些可以搶焦點的控件導(dǎo)致無法獲取焦點問題:
(注意:ListView的項根元素layout的寬要設(shè)置成android:layout_width="fill_parent",否則可能會因為項內(nèi)容太短,導(dǎo)致點擊時獲取不到焦點)
1>.如果你自定義ListView的項中包含能獲得焦點的子控件(RadioGroup、Button、CheckBox、DatePicker、ImageButton、ScrollView、SeekBar、EditText、ToggleButton、RatingBar等)的話,默認焦點會被交給這些子控件,而ListView的項能被選中的基礎(chǔ)是它能獲取焦點,所以項中的這些子控件的焦點必須為false,這樣ListView的項才能獲取onItemLongClick事件與onItemClick事件
解決辦法(以Button為例):
在布局文件中,在項的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是程序動態(tài)生成的,則調(diào)用
layout.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
2>.如果你自定義ListView的項中包含能獲得焦點的子控件GridView的話,默認焦點會被交給這些子控件,而ListView的項能被選中的基礎(chǔ)是它能獲取焦點,所以項中的這些子控件的焦點必須為false,這樣ListView的項才能獲取onItemLongClick事件與onItemClick事件
解決辦法(以Button為例):
1.在布局文件中,在項的layout布局文件根元素中加入
android:descendantFocusability="blocksDescendants"
2.程序中給GridView進行如下設(shè)置
gridView.setClickable(false); gridView.setPressed(false); gridView.setEnabled(false);
三.ListView的UI顯示中常見問題及解決辦法
1>如果需求是listview點擊時,item無背景變色效果
步驟:
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è)置分割線Divider樣式,布局文件給listview加入如下屬性(已分隔符為顏色為例)
android:divider屬性用來設(shè)置分割線顏色(或圖片),當(dāng)設(shè)置為#00000000時表示item之間無間隙;
通過android:dividerHeight屬性設(shè)置分割線高度
android:divider="#ff999999" android:dividerHeight="1sp"
3>UI展現(xiàn)時常見問題
問題1:listview設(shè)置背景,拖動listview時顯示黑色,只有拖動完才會顯示我們設(shè)置的背景顏色或圖片
產(chǎn)生原因:listview的背景是固定不變的,默認Listview的每項的背景是透明的,拖動滾動條的過程中需要實時將每個項的顯示內(nèi)容跟背景進行混合運算,android系統(tǒng)為了優(yōu)化這個過程,使用了android:cacheColorHint屬性,在黑色背景下默認顏色為#191919,所以出現(xià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"
問題2:listview上面或下面有黑色陰影
解決辦法:布局文件中給listview加入android:fadingEdge="none"
UI總結(jié):
綜上問題得到最終的布局為(帶分割線+背景色)

<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" />

本文標(biāo)題:ListView+Adapter適配器的使用與Listview常見的UI顯示問題
網(wǎng)站網(wǎng)址:http://www.chinadenli.net/article30/jdhsso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、微信小程序、做網(wǎng)站、標(biāo)簽優(yōu)化、網(wǎng)頁設(shè)計公司、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)