《Android APP要解決的問(wèn)題》之顯示篇:ScrollView嵌套ListView

前言

有些需求中界面里面除了listview還有其他內(nèi)容需要顯示蒲犬,而且內(nèi)容還不少鸦采,這樣的話交給listview的空間就少了很多,這樣就得嵌套一層scrollview來(lái)讓整個(gè)界面都可以滑動(dòng),才能完整的看到listview,不至于就那么一小塊地方在那里上下滑動(dòng)蕴茴。

然后在scroll里面嵌套listview問(wèn)題就出來(lái)了,listview只顯示了一行或者兩行數(shù)據(jù)姐直,這就蛋疼了倦淀,當(dāng)然可以手動(dòng)給listview設(shè)置一個(gè)高度,但是這顯然不能適配所有手機(jī)屏幕的顯示声畏。這里記錄一下解決方式撞叽。

解決一

我之前采取的方式是重新手動(dòng)計(jì)算ListView高度,代碼如下:

public class UIUtil {
    public static void setListViewHeightBasedOnChildren(ListView listView) {
        //獲取ListView對(duì)應(yīng)的Adapter
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
            // pre-condition
            return;
        }

        int totalHeight = 0;
        for (int i = 0, len = listAdapter.getCount(); i < len; i++) {   //listAdapter.getCount()返回?cái)?shù)據(jù)項(xiàng)的數(shù)目
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, 0);  //計(jì)算子項(xiàng)View 的寬高
            totalHeight += listItem.getMeasuredHeight();  //統(tǒng)計(jì)所有子項(xiàng)的總高度
        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        //listView.getDividerHeight()獲取子項(xiàng)間分隔符占用的高度
        //params.height最后得到整個(gè)ListView完整顯示需要的高度
        listView.setLayoutParams(params);
    }
}


然后在用到listview的地方再調(diào)用就行了插龄。

問(wèn)題

然鵝昨天發(fā)現(xiàn)會(huì)在oppo愿棋,系統(tǒng)版本4.2.2上面會(huì)報(bào)空指針,我6.0系統(tǒng)沒(méi)問(wèn)題辫狼。具體原因沒(méi)有沒(méi)有探究初斑,因?yàn)槲乙冉鉀Q問(wèn)題辛润,報(bào)錯(cuò)代碼來(lái)自于這一行:

listItem.measure(0, 0);

解決二

然后我就換了另外一種方式膨处,自定義listview见秤,重寫(xiě)onMeasure方法:

 @Override
    /**
     * 重寫(xiě)該方法,達(dá)到使ListView適應(yīng)ScrollView的效果
     */
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }

這里主要是對(duì)高度進(jìn)行了重繪真椿,MeasureSpec.AT_MOST測(cè)量模式:The child can be as large as it wants up to the specified size.需要展示的子view會(huì)盡量大到它具體的大小鹃答。強(qiáng)行設(shè)置AT_MOST來(lái)測(cè)量ListView自適應(yīng)。

別忘記重新?lián)Q控件引用突硝。

然后就是進(jìn)入界面的時(shí)候测摔,會(huì)直接定位到listview的頂部,解決:

scrollview.smoothScrollTo(0, 0);

問(wèn)題

嚴(yán)重的性能問(wèn)題解恰,根據(jù)官方設(shè)計(jì)建議锋八,ListView其實(shí)是禁止放在ScrollView等垂直滾動(dòng)視圖中的,具體說(shuō)明參看Android應(yīng)用性能優(yōu)化系列視圖篇——ListView自適應(yīng)導(dǎo)致的嚴(yán)重性能問(wèn)題,強(qiáng)行放置的結(jié)果就是ScrollView中嵌有列表的頁(yè)面可能會(huì)卡出翔护盈,文章中也給出了幾點(diǎn)建議挟纱。但是我使用的場(chǎng)景是不會(huì)用大量數(shù)據(jù)的,性能再耗也不會(huì)卡/姚明笑~

解決三

但是數(shù)據(jù)量大的怎么辦呢腐宋?上面引文中提到了一個(gè)自定義控件紊服,SimulateListView或許可以滿足需求,但是我木有嘗試胸竞,這里做一個(gè)記錄而已欺嗤,以備不時(shí)之需。

這次沒(méi)有代碼


本文作者:paradoxie
個(gè)人主頁(yè):謝盒盒的小黑屋卫枝,不止說(shuō)技術(shù)
簡(jiǎn)書(shū)地址:簡(jiǎn)書(shū)主頁(yè)煎饼,專(zhuān)注技術(shù)類(lèi)
github地址:paradoxie
轉(zhuǎn)載請(qǐng)注明出處,蟹蟹!
-------我的夢(mèng)想真的是做一條咸魚(yú)校赤!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腺占,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子痒谴,更是在濱河造成了極大的恐慌衰伯,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件积蔚,死亡現(xiàn)場(chǎng)離奇詭異意鲸,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)尽爆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)怎顾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人漱贱,你說(shuō)我怎么就攤上這事槐雾。” “怎么了幅狮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵募强,是天一觀的道長(zhǎng)株灸。 經(jīng)常有香客問(wèn)我,道長(zhǎng)擎值,這世上最難降的妖魔是什么慌烧? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮鸠儿,結(jié)果婚禮上屹蚊,老公的妹妹穿的比我還像新娘。我一直安慰自己进每,他們只是感情好汹粤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著田晚,像睡著了一般玄括。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肉瓦,一...
    開(kāi)封第一講書(shū)人閱讀 49,764評(píng)論 1 290
  • 那天遭京,我揣著相機(jī)與錄音,去河邊找鬼泞莉。 笑死哪雕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鲫趁。 我是一名探鬼主播斯嚎,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼挨厚!你這毒婦竟也來(lái)了堡僻?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤疫剃,失蹤者是張志新(化名)和其女友劉穎钉疫,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體巢价,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡牲阁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了壤躲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片城菊。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖碉克,靈堂內(nèi)的尸體忽然破棺而出凌唬,到底是詐尸還是另有隱情,我是刑警寧澤漏麦,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布客税,位于F島的核電站况褪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏霎挟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一麻掸、第九天 我趴在偏房一處隱蔽的房頂上張望酥夭。 院中可真熱鬧,春花似錦脊奋、人聲如沸熬北。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)讶隐。三九已至,卻和暖如春久又,著一層夾襖步出監(jiān)牢的瞬間巫延,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工地消, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炉峰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓脉执,卻偏偏與公主長(zhǎng)得像疼阔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子半夷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容