溫馨提示×

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

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

Android中Adapter里面嵌套ListView的示例分析

發(fā)布時(shí)間:2021-07-15 11:24:47 來(lái)源:億速云 閱讀:117 作者:小新 欄目:移動(dòng)開(kāi)發(fā)

這篇文章主要為大家展示了“Android中Adapter里面嵌套ListView的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Android中Adapter里面嵌套ListView的示例分析”這篇文章吧。

Android Adapter里面嵌套ListView實(shí)例詳解

前言:

可嵌套~但是顯示需要特殊處理下~以下是處理方法

前幾天因?yàn)轫?xiàng)目的需要,要在一個(gè)ListView中放入另一個(gè)ListView,也即在一個(gè)ListView的每個(gè)ListItem中放入另外一個(gè)ListView。但剛開(kāi)始的時(shí)候,會(huì)發(fā)現(xiàn)放入的小ListView會(huì)顯示不完全,它的高度始終有問(wèn)題。上網(wǎng)查了下,發(fā)現(xiàn)別人也有遇到這樣的問(wèn)題,而大多數(shù)人都不推薦這樣的設(shè)計(jì),因?yàn)槟J(rèn)情況下Android是禁止在ScrollView中放入另外的ScrollView的,它的高度是無(wú)法計(jì)算的。

     又搜索了一下,發(fā)現(xiàn)有StackOverflow上的牛人已經(jīng)解決了這個(gè)問(wèn)題,經(jīng)過(guò)試驗(yàn)發(fā)現(xiàn)是可以解決問(wèn)題的,它的思路就是在設(shè)置完ListView的Adapter后,根據(jù)ListView的子項(xiàng)目重新計(jì)算ListView的高度,然后把高度再作為L(zhǎng)ayoutParams設(shè)置給ListView,這樣它的高度就正確了,以下是源碼: 

public class Utility {  
  public static void setListViewHeightBasedOnChildren(ListView listView) {  
    ListAdapter listAdapter = listView.getAdapter();   
    if (listAdapter == null) {  
      // pre-condition  
      return;  
    }  
  
    int totalHeight = 0;  
    for (int i = 0; i < listAdapter.getCount(); i++) {  
      View listItem = listAdapter.getView(i, null, listView);  
      listItem.measure(0, 0);  
      totalHeight += listItem.getMeasuredHeight();  
    }  
  
    ViewGroup.LayoutParams params = listView.getLayoutParams();  
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));  
    listView.setLayoutParams(params);  
  }  
}

       只要在設(shè)置ListView的Adapter后調(diào)用此靜態(tài)方法即可讓ListView正確的顯示在其父ListView的ListItem中。但是要注意的是,子ListView的每個(gè)Item必須是LinearLayout,不能是其他的,因?yàn)槠渌腖ayout(如RelativeLayout)沒(méi)有重寫onMeasure(),所以會(huì)在onMeasure()時(shí)拋出異常。

      在ScrollView中嵌套ListView(或者ScrollView)的另外一個(gè)問(wèn)題就是,子ScrollView中無(wú)法滑動(dòng)的(如果它沒(méi)有顯示完全的話),因?yàn)榛瑒?dòng)事件會(huì)被父ScrollView吃掉,如果想要讓子ScrollView也可以滑動(dòng),只能強(qiáng)行截取滑動(dòng)事件,有牛人在論壇中發(fā)過(guò)代碼說(shuō)可以。雖然我沒(méi)有親自試過(guò),但估計(jì)是可行的。

      雖然在ScrollView中顯示ScrollView在技術(shù)上的難題可以攻破,但是這樣的設(shè)計(jì)卻是非常差的用戶體驗(yàn)因?yàn)橛脩魰?huì)不容易看到和操作子ScrollView中的內(nèi)容。比如好的設(shè)計(jì)是,父ListView的每個(gè)Item只顯示概括性的描述,然后點(diǎn)擊其Item會(huì)進(jìn)入另外一個(gè)頁(yè)面來(lái)詳細(xì)描述和展示以及對(duì)這個(gè)Item的操作。

以上是“Android中Adapter里面嵌套ListView的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

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

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎ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