ListView巢狀ListView優化

2021-08-27 17:35:41 字數 1058 閱讀 3850

在做業務時候,乙個listview顯示多種資料型別,我們想到的方法是listview在巢狀乙個listview,對於子listview

佔父listview的一行,就解決了問題,但是這樣的邏輯是不是有點奇怪呢?

第一,父listview的長度size需要加1,因為增加了一行放子listview

public int getcount()

第二,需要判斷在什麼地方插入子listview ,就要用到getviewtypecount()和getitemviewtype (int position)兩個方法

public int getitemviewtype (int position)

return type_1;//type_1表示父listview標誌

第三,需要在父ui更新時候,當position>chrildlocation時對position-1,因為你在前面插入了子listview,其實後

面得到的position,都佔了乙個位置.需要這時候減去

這三步理解起來就讓人夠煩了,很混亂吧,還有更糟糕的事情,就是,子listview你還要new 乙個adapter來遍歷

出它的item,這樣就形成迴圈中巢狀迴圈,你的**效能是不是很差。

重點來了:

我們可以在傳入adapter的資料中做文章,把不同的資料型別都用object代替,然後把object放入list集合,

在adapter,判斷型別,比如:乙個商品列表,中間會雜著一些商品主題團,我們就通過list封裝

這兩種資料型別,實現對上面listview巢狀的講解。

第一,在adapter之外封裝成乙個list,就不需要在用到子listview了,資料都在list中,也就不需要對

datas.size()+1的操作了,只需要判斷資料型別,然後做上面第二步操作;

public int getitemviewtype (int position)

return type_1;//type_1表示商品

完了,也就不需要對資料更新ui時候減一操作,避免了降低了出錯的概率。

主要是不需要在getview中在new adapter了,效能提高很大。

解決ListView巢狀ListView遇到的問題

listview巢狀會造成的問題主要是子listview的高度錯誤導致內容不能正常顯示完,解決這個問題,我個人第乙個想法就是重新計算子listview的高度,如下 private void setlistviewheightbasedonchildren listview listview int ...

ListView巢狀listView問題

listview巢狀listview 外層的listview是原生的,裡面的是自定義的mylistview 1.如果兩層都是listview,出現問題 裡層的listview只會顯示一條資料 2.如果外層mylistview,裡層listview 出現問題 導致只能顯示一屏資料,而且裡層的listv...

ListView巢狀ListView的思路

1.在activity中,布局中新增原生listview作為 父listview 2.在父listview中新增自定義的 子listview 3.子listview中的布局為單個item的布局。4.書寫父listview的adapter public class eventcitylistadapt...