溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

ListView+Adapter適配器的使用與Listview常見(jiàn)的UI顯示問(wèn)題

發(fā)布時(shí)間:2020-07-27 13:31:20 來(lái)源:網(wǎng)絡(luò) 閱讀:249 作者:胡雨生 欄目:移動(dòng)開(kāi)發(fā)

一.ListView的事件:

1.setOnItemClickListener()點(diǎn)擊事件

ListView+Adapter適配器的使用與Listview常見(jiàn)的UI顯示問(wè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();
            }
        });

ListView+Adapter適配器的使用與Listview常見(jiàn)的UI顯示問(wèn)題

 

2.setOnItemLongClickListener()長(zhǎng)按事件,設(shè)置“長(zhǎng)按”listview某一項(xiàng)的監(jiān)聽(tīng)事件。

ListView+Adapter適配器的使用與Listview常見(jiàn)的UI顯示問(wèn)題

    listview.setOnItemLongClickListener( OnItemLongClickListener() {  
            @Override  
              onItemLongClick(AdapterView<?> parent, View view,  
                     position,  id) {
          Toast.makeText(ArrayAdapterActivity., "你了第"+(position+1)+"項(xiàng)", Toast.LENGTH_SHORT).show();
           ; 
       } 
    });

ListView+Adapter適配器的使用與Listview常見(jiàn)的UI顯示問(wèn)題

 二.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"如:

ListView+Adapter適配器的使用與Listview常見(jiàn)的UI顯示問(wèn)題

<?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>

ListView+Adapter適配器的使用與Listview常見(jiàn)的UI顯示問(wèn)題

如果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+Adapter適配器的使用與Listview常見(jiàn)的UI顯示問(wè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"
        />

ListView+Adapter適配器的使用與Listview常見(jiàn)的UI顯示問(wèn)題

 

 

 

 


向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI