本申請涉及計算機領(lǐng)域,尤其涉及一種混合模型列表項重用的方法及設(shè)備。
背景技術(shù):
hybrid(混合模型)開發(fā),是指采用前端開發(fā)和native(原生端)開發(fā)混合的技術(shù)來開發(fā)程序,其中,前端開發(fā),是指基于javascript、html、css等技術(shù)開發(fā)網(wǎng)頁和webapp;native開發(fā),指基于手機等智能設(shè)備的本地操作系統(tǒng)的原生功能來編寫程序,比如基于ios、android等系統(tǒng)原生界面開發(fā)。react,是一款由facebook出品的js框架,用于規(guī)范化前端開發(fā)的一套構(gòu)建體系。react-native,是一款由facebook在react規(guī)范基礎(chǔ)上,推出的一套使用前端技術(shù)就能開發(fā)native應(yīng)用的技術(shù)實現(xiàn)框架。
hybrid開發(fā)是當(dāng)下移動互聯(lián)網(wǎng)app非常流行的一種開發(fā)模式,是使用前端網(wǎng)頁的開發(fā)技術(shù)來進行界面和業(yè)務(wù)的開發(fā),而使用native開發(fā)來提供各種os原生的能力,以達到app擁有前端的動態(tài)能力和native的體驗效果。listview(列表視圖)是app最常見的一種展現(xiàn)形式,用于展示列表形態(tài)內(nèi)容的頁面,以列表的方式展現(xiàn)大量的有相同或者相似結(jié)構(gòu)的列表項,通??梢灾С秩菁{各種列表項(listcell),這些列表項展現(xiàn)結(jié)構(gòu)基本相同,僅僅是要展現(xiàn)的信息內(nèi)容不同而已,其中,listcell是listview每行或者每個子項展現(xiàn)的內(nèi)容。由于屏幕顯示區(qū)域有限,所以屏幕在同一時刻,只能展現(xiàn) listview的部分列表項內(nèi)容,其他listcell,只能通過上下滾動,將一些listcell滾動入屏幕顯示區(qū)域,相應(yīng)的一些listview會滾動出顯示區(qū)域。所以,用戶在屏幕可見的listcell總是很有限的,而目前的前端技術(shù),卻需要由前端觸發(fā)native為所有的listcell創(chuàng)建實例和進行渲染,存在很大的性能浪費。具體來說,在react-native上現(xiàn)有的listview實現(xiàn)方案如圖1所示,由于listcell是在前端層定義的,react-native框架只能將listview的結(jié)構(gòu)原原本本的映射到native層,所以,如果這個listview有100個列表項,那么在native,就會創(chuàng)建100個listcell,并且對這個100個listcell進行了布局和渲染,既消耗內(nèi)存,又消耗時間。
在列表滾動過程中,移出可顯示區(qū)域的listcell,完全可以繼續(xù)復(fù)用來展現(xiàn)即將要移入可顯示區(qū)域的listcell,從而可以節(jié)省下創(chuàng)建和布局新listcell所需的內(nèi)存和時間,提升性能。而目前的hybrid技術(shù),在開發(fā)listview中,由于listcell在前端中定義結(jié)構(gòu)布局和樣式,并且由前端觸發(fā)native創(chuàng)建listcell實例,受前端dom渲染機制的限制,native沒有辦法高效的重用listcell,因為重構(gòu)dom的代價更大。
目前native的開發(fā),有相應(yīng)的技術(shù)實現(xiàn)listcell的重用,但是,由于hybrid技術(shù)使用前端技術(shù)來開發(fā)頁面,所以listview和listcell都是在前端中完成創(chuàng)建的,如果在native來創(chuàng)建和重用listcell,又無法將在前端定義的listcellclass傳遞給native,即在前端js(javascript)定義的listcell的class(樣式),無法在native直接創(chuàng)建實例。所以,目前業(yè)界在hybrid開發(fā)中,還沒有技術(shù)可以實現(xiàn)前端listcell的復(fù)用。
技術(shù)實現(xiàn)要素:
本申請的一個目的是提供一種混合模型列表項重用的方法及設(shè)備,解決hybrid開發(fā)中,在前端定義listcell的結(jié)構(gòu)和樣式,而在native進行l(wèi)istcell的創(chuàng)建和復(fù)用的問題。
根據(jù)本申請的一個方面,提供了一種混合模型列表項重用的方法,該方法包括:
在混合模型的前端對列表項的原型進行定義;
在所述混合模型的原生端根據(jù)所述列表項的原型復(fù)制得到列表項,并對所述列表項進行復(fù)用。
進一步的,上述方法中,對列表項的原型進行定義,包括:
對列表項的原型的結(jié)構(gòu)布局和樣式進行定義。
進一步的,上述方法中,所述列表項的原型為單個列表項的原型。
進一步的,上述方法中,根據(jù)所述列表項的原型復(fù)制得到列表項,包括:
根據(jù)所述列表項的原型創(chuàng)建列表項模板;
對所述列表項模板進行復(fù)制得到列表項;
將獲取到的列表項內(nèi)容填入復(fù)制得到列表項中,并顯示所述列表項。
進一步的,上述方法中,對所述列表項模板進行復(fù)制得到列表項,包括:
遍歷獲取列表項模板的所有子視圖;
創(chuàng)建包含所有子視圖及其屬性的列表項。
進一步的,上述方法中,將獲取到的列表項內(nèi)容填入復(fù)制得到列表項中,包括:
將獲取到列表項內(nèi)容填入創(chuàng)建后的列表項的對應(yīng)的各個子視圖中。
進一步的,上述方法中,所述列表項內(nèi)容從所述前端獲取。
進一步的,上述方法中,對所述列表項模板進行復(fù)制得到列表項中,
根據(jù)顯示區(qū)域能容納顯示的列表項的數(shù)量,來確定復(fù)制得到列表項的數(shù)量。
進一步的,上述方法中,對所述列表項進行復(fù)用,包括:
當(dāng)有列表項內(nèi)容移出所述顯示區(qū)域,將該移出的列表項內(nèi)容所屬的列表項回收為可復(fù)用的列表項;
當(dāng)有新的列表項內(nèi)容要移入所述顯示區(qū)域,判斷是否有可復(fù)用的列表項,
若有,將所述新的列表項內(nèi)容填入所述可復(fù)用列表項,顯示所述列表項;
若無,對所述列表項模板進行復(fù)制得到列表項,將新的列表項內(nèi)容填入復(fù)制得到列表項中,顯示所述列表項。
根據(jù)本申請的另一方面,還提供了一種混合模型列表項重用的設(shè)備,該設(shè)備包括:
定義裝置,用于在混合模型的前端對列表項的原型進行定義;
復(fù)制及復(fù)用裝置,用于在所述混合模型的原生端根據(jù)所述列表項的原型復(fù)制得到列表項,并對所述列表項進行復(fù)用。
進一步的,上述設(shè)備中,所述定義裝置,用于對列表項的原型的結(jié)構(gòu)布局和樣式進行定義。
進一步的,上述設(shè)備中,所述列表項的原型為單個列表項的原型。
進一步的,上述設(shè)備中,所述復(fù)制及復(fù)用裝置,用于根據(jù)所述列表項的原型創(chuàng)建列表項模板;對所述列表項模板進行復(fù)制得到列表項;將獲取到的列表項內(nèi)容填入復(fù)制得到列表項中,并顯示所述列表項。
進一步的,上述設(shè)備中,所述復(fù)制及復(fù)用裝置,用于遍歷獲取列表項模板的所有子視圖;創(chuàng)建包含所有子視圖及其屬性的列表項。
進一步的,上述設(shè)備中,所述復(fù)制及復(fù)用裝置,用于將獲取到列表項內(nèi)容填入創(chuàng)建后的列表項的對應(yīng)的各個子視圖中。
進一步的,上述設(shè)備中,所述列表項內(nèi)容從所述前端獲取。
進一步的,上述設(shè)備中,所述復(fù)制及復(fù)用裝置,用于根據(jù)顯示區(qū)域能容納顯示的列表項的數(shù)量,來確定復(fù)制得到列表項的數(shù)量。
進一步的,上述設(shè)備中,所述復(fù)制及復(fù)用裝置,用于當(dāng)有列表項內(nèi)容移出所述顯示區(qū)域,將該移出的列表項內(nèi)容所屬的列表項回收為可復(fù)用的列表項;當(dāng)有新的列表項內(nèi)容要移入所述顯示區(qū)域,判斷是否有可復(fù)用的列表項,若有,將所述新的列表項內(nèi)容填入所述可復(fù)用列表項,顯示所述列表項;若無,對所述列表項模板進行復(fù)制得到列表項,將新的列表項內(nèi)容填入復(fù)制得到列表項中,顯示所述列表項。
與現(xiàn)有技術(shù)相比,本申請通過在前端實現(xiàn)列表項的原型定義,在原生端通過對列表項的原型的復(fù)制,原生端根據(jù)當(dāng)前列表展現(xiàn)的位置,對于已經(jīng)不在可見范圍的列表項進行重用,來實現(xiàn)在前端定義列表項的原型,而在原生端自由的創(chuàng)建、渲染和復(fù)用列表項,達到了既保留了混合模型開發(fā)對列表項定義的靈活自由,又可以在原生端復(fù)用列表項,大大提升了大列表的展現(xiàn)和操作性能。本申請技術(shù)方案的核心,是在混合模型開發(fā)中,解決在前端定義 列表項的結(jié)構(gòu)和樣式,而在原生端進行列表項的創(chuàng)建和復(fù)用的問題,以達到在列表頁面中復(fù)用列表項,提升渲染和操作的性能。
附圖說明
通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細描述,本申請的其它特征、目的和優(yōu)點將會變得更明顯:
圖1示出現(xiàn)有的列表視圖的實現(xiàn)方式;
圖2示出根據(jù)本申請一個方面的一種混合模型列表項重用的方法的流程圖;
圖3示出本申請一優(yōu)選的實施例的原理圖;
圖4示出本申請另一優(yōu)選的實施例的原理圖;
圖5示出本申請再一優(yōu)選的實施例的原理圖;
圖6示出根據(jù)本申請另一個方面的一種混合模型列表項重用的設(shè)備的模塊圖。
附圖中相同或相似的附圖標(biāo)記代表相同或相似的部件。
具體實施方式
下面結(jié)合附圖對本申請作進一步詳細描述。
在本申請一個典型的配置中,終端、服務(wù)網(wǎng)絡(luò)的設(shè)備和可信方均包括一個或多個處理器(cpu)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲器(rom)或閃存(flashram)。內(nèi)存是計算機可讀介質(zhì)的示例。
計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以 由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(pram)、靜態(tài)隨機存取存儲器(sram)、動態(tài)隨機存取存儲器(dram)、其他類型的隨機存取存儲器(ram)、只讀存儲器(rom)、電可擦除可編程只讀存儲器(eeprom)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括非暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號和載波。
如圖2所示,根據(jù)本申請的一個方面,提供一種混合模型列表項重用的方法,其中,該方法包括:
步驟s1,在混合模型的前端對列表項的原型進行定義;
步驟s2,在所述混合模型的原生端根據(jù)所述列表項的原型復(fù)制得到列表項,并對所述列表項進行復(fù)用。本申請通過在前端實現(xiàn)列表項(listcell)的原型(母體)定義,在原生端(native)通過對列表項的原型的復(fù)制(克隆),原生端根據(jù)當(dāng)前列表展現(xiàn)的位置,對于已經(jīng)不在可見范圍的列表項進行重用,來實現(xiàn)在前端定義列表項的原型,而在原生端自由的創(chuàng)建、渲染和復(fù)用列表項,達到了既保留了混合模型(hybrid)開發(fā)對列表項定義的靈活自由,又可以在原生端復(fù)用列表項,大大提升了大列表的展現(xiàn)和操作性能。本申請技術(shù)方案的核心,是在hybrid開發(fā)中,解決在前端定義listcell的結(jié)構(gòu)和樣式,而在native進行l(wèi)istcell的創(chuàng)建和復(fù)用的問題,以達到在列表頁面中復(fù)用listcell,提升渲染和操作的性能。本申請適用于所有hybridapp 開發(fā),并且在react-native框架上,得到了非常好的實施效果。
本申請一種混合模型列表項重用的方法一優(yōu)選的實施例中,步驟s1中對列表項的原型進行定義,包括:
對列表項的原型的結(jié)構(gòu)布局和樣式進行定義。在此,對列表項(listcell)的原型進行定義包括對列表項的結(jié)構(gòu)和樣式進行定義,實現(xiàn)混合模型(hybrid)開發(fā)中前端對listcell靈活自由地進行定義。
本申請一種混合模型列表項重用的方法一優(yōu)選的實施例中,所述列表項的原型為單個列表項的原型。在此,在前端層,僅僅創(chuàng)建了列表項的原型這一個實例,后續(xù)可在原生端也僅僅基于這個原型創(chuàng)建一個列表項模板,然后在需要時對該列表項模板進行復(fù)制,從而可以節(jié)省下創(chuàng)建和布局新列表項所需的內(nèi)存和時間,提升性能。
本申請一種混合模型列表項重用的方法一優(yōu)選的實施例中,根據(jù)所述列表項的原型復(fù)制得到列表項,包括:
根據(jù)所述列表項的原型創(chuàng)建列表項模板;
對所述列表項模板進行復(fù)制得到列表項;
將獲取到的列表項內(nèi)容填入復(fù)制得到列表項中,并顯示所述列表項。在此,如圖3所示,在原生端僅僅基于前端定義的原型創(chuàng)建列表項模板即圖中的listcell原型實例,然后根據(jù)需要顯示的列表項內(nèi)容的多少對該列表項模板進行復(fù)制,得到相應(yīng)數(shù)量的列表項,再將所述列表項內(nèi)容即圖3中的列表項數(shù)據(jù)1~n分別填入對應(yīng)的列表項中后進行渲染顯示,從而可以節(jié)省下創(chuàng)建和布局新列表項所需的內(nèi)存和時間,提升性能。
本申請一種混合模型列表項重用的方法一優(yōu)選的實施例中,對所述列 表項模板進行復(fù)制得到列表項,包括:
遍歷獲取列表項模板的所有子視圖;
創(chuàng)建包含所有子視圖及其屬性的列表項。在此,遞歸遍歷列表項模板的所有子view(視圖),再復(fù)制一份列表項出來包含所有子視圖及每個子視圖對應(yīng)的屬性,從而實現(xiàn)對列表項的準(zhǔn)確復(fù)制。具體的,如圖4所示,列表項模板即圖4中的listcell原型的子視圖包括a、b、c、d、e,復(fù)制listcell原型即是創(chuàng)建包含listcell原型的所有子視圖及其屬性的列表項的過程,得到的列表項的子視圖包括a’、b’、c’、d’、e’。
本申請一種混合模型列表項重用的方法一優(yōu)選的實施例中,將獲取到的列表項內(nèi)容填入復(fù)制得到列表項中,包括:
將獲取到列表項內(nèi)容填入創(chuàng)建后的列表項的對應(yīng)的各個子視圖中。在此,可根據(jù)列表項內(nèi)容,將列表項內(nèi)容分別填入復(fù)制出來的列表項中的各對應(yīng)子視圖中,從而實現(xiàn)列表項內(nèi)容在列表項中相應(yīng)位置的準(zhǔn)確顯示。具體的,如圖4所示,本實施例中,將列表項內(nèi)容即圖4中的內(nèi)容數(shù)據(jù)分別填到復(fù)制得到的列表項的各對應(yīng)的子視圖a’、b’、c’、d’、e’中。
本申請一種混合模型列表項重用的方法一優(yōu)選的實施例中,所述列表項內(nèi)容從所述前端獲取。在此,如圖3所示,前端除了完成列表項的原型的定義,只要將列表項內(nèi)容即圖3中的列表項數(shù)據(jù)傳遞至原生端即可,從而減少前端數(shù)據(jù)處理的內(nèi)存消耗和時間消耗。
本申請一種混合模型列表項重用的方法一優(yōu)選的實施例中,對所述列表項模板進行復(fù)制得到列表項中,
根據(jù)顯示區(qū)域能容納顯示的列表項的數(shù)量,來確定復(fù)制得到列表項的 數(shù)量。在此,尤其在顯示區(qū)域首次顯示列表項時,由于還沒有可復(fù)用列表項,此時需要根據(jù)顯示區(qū)域能容納顯示的列表項的數(shù)量,來復(fù)制對應(yīng)數(shù)量的列表項,例如,圖3中根據(jù)一屏能顯示的列表項的數(shù)量確定生成對應(yīng)數(shù)量的列表項,從而實現(xiàn)列表項的按需復(fù)制,節(jié)省下創(chuàng)建和布局新列表項所需的內(nèi)存和時間,提升性能,例如,有10個列表項內(nèi)容需要顯示,某一個顯示區(qū)域能容納顯示的列表項的數(shù)量為10個,那么此時需要復(fù)制10個的列表項。
本申請一種混合模型列表項重用的方法一優(yōu)選的實施例中,對所述列表項進行復(fù)用,包括:
當(dāng)有列表項內(nèi)容移出所述顯示區(qū)域,將該移出的列表項內(nèi)容所屬的列表項回收為可復(fù)用的列表項;
當(dāng)有新的列表項內(nèi)容要移入所述顯示區(qū)域,判斷是否有可復(fù)用的列表項,
若有,將所述新的列表項內(nèi)容填入所述可復(fù)用列表項,顯示所述列表項;
若無,對所述列表項模板進行復(fù)制得到列表項,將新的列表項內(nèi)容填入復(fù)制得到列表項中,顯示所述列表項。在此,如圖3所示,尤其在顯示區(qū)域首次顯示列表項之后,由于此時可能已經(jīng)有了可復(fù)用列表項,顯示新的列表項內(nèi)容時利用可復(fù)用列表項即可,即在列表滾動過程中循環(huán)復(fù)用移動顯示區(qū)域的列表項,從而,進一步節(jié)省下創(chuàng)建和布局新列表項所需的內(nèi)存和時間,提升性能,當(dāng)然,如果沒有可復(fù)用的列表項,那么需要根據(jù)新的列表內(nèi)容對所述列表項模板進行復(fù)制得到對應(yīng)數(shù)據(jù)列表項,例如,有15個列表項內(nèi)容需要顯示,某一個顯示區(qū)域能容納顯示的列表項的數(shù)量為10 個,首次顯示時需要復(fù)制10個的列表項,以顯示其中10個列表項內(nèi)容,當(dāng)剩余的5個列表項內(nèi)容需要顯示移入顯示區(qū)域時,相應(yīng)會有5個已經(jīng)顯示過的列表項內(nèi)容移出顯示區(qū)域,這5個移出顯示區(qū)域的列表項會可回收為可復(fù)用的列表項,那么剩余的5個列表項內(nèi)容即可復(fù)用該5個可復(fù)用的列表項。
如圖5所示,為了更好的理解本申請的原理和流程,以在一個具體的hybrid框架(react-native)上為例,來解釋本申請的實現(xiàn)原理和流程,具體如下:
步驟s51,前端層定義列表項的結(jié)構(gòu)和樣式;
步驟s52,前端層獲取列表的內(nèi)容數(shù)據(jù)即列表項內(nèi)容;
步驟s53,前端層根據(jù)定義列表項的結(jié)構(gòu)和樣式創(chuàng)建listcell的原型,及向原生端傳遞所述列表的內(nèi)容數(shù)據(jù),后轉(zhuǎn)到步驟s56;
步驟s56,原生端層根據(jù)前端層創(chuàng)建的listcell的原型創(chuàng)建listcell原型實例,即列表項模板;
步驟s57,原生端判斷當(dāng)有新的列表項要移入顯示區(qū)域,轉(zhuǎn)到步驟s58;
步驟s57的同時,步驟s62,原生端判斷當(dāng)有列表項要移出顯示區(qū)域,轉(zhuǎn)到步驟s63;
步驟s63,原生端將移動顯示區(qū)域的列表項作為可復(fù)用的列表項后轉(zhuǎn)到步驟s58;
步驟s58,原生端判斷是否有可復(fù)用的列表項;
若有,步驟s59,原生端直接復(fù)用所述可復(fù)用的列表項后轉(zhuǎn)到步驟s61;在此,原生端根據(jù)可顯示區(qū)域能容納顯示的列表項的數(shù)量,來決定哪些列表項可以被復(fù)用;
若無,步驟s60,原生端根據(jù)列表的內(nèi)容數(shù)據(jù),從listcell原型實例復(fù)制列表項后轉(zhuǎn)到步驟s61;在此,原生端會根據(jù)前端層傳遞過來的列表的內(nèi)容數(shù)據(jù),復(fù)制其他listcell;
步驟s61,對列表項進行渲染后轉(zhuǎn)到步驟s54;
步驟s54,前端層用戶滾動列表;
步驟s55,前端層觸發(fā)刷新后,轉(zhuǎn)到步驟s53,此時,無需再創(chuàng)建listcell的原型,僅向原生端傳遞刷新后的所述列表的內(nèi)容數(shù)據(jù),即新的待顯示的列表的內(nèi)容數(shù)據(jù)。
如圖6所示,根據(jù)本申請的另一面還提供一種混合模型列表項重用的設(shè)備,所述設(shè)備100包括:
定義裝置1,用于在混合模型的前端對列表項的原型進行定義;
復(fù)制及復(fù)用裝置2,用于在所述混合模型的原生端根據(jù)所述列表項的原型復(fù)制得到列表項,并對所述列表項進行復(fù)用。本申請通過在前端實現(xiàn)列表項(listcell)的原型定義,在原生端(native)通過對列表項的原型的復(fù)制,原生端根據(jù)當(dāng)前列表展現(xiàn)的位置,對于已經(jīng)不在可見范圍的列表項進行重用,來實現(xiàn)在前端定義列表項的原型,而在原生端自由的創(chuàng)建、渲染和復(fù)用列表項,達到了既保留了混合模型(hybrid)開發(fā)對列表項定義的靈活自由,又可以在原生端復(fù)用列表項,大大提升了大列表的展現(xiàn)和操作性能。本申請技術(shù)方案的核心,是在hybrid開發(fā)中,解決在前端定義listcell的結(jié)構(gòu)和樣式,而在native進行l(wèi)istcell的創(chuàng)建和復(fù)用的問題,以達到在列表頁面中復(fù)用listcell,提升渲染和操作的性能。本申請適用于所有hybridapp開發(fā),并且在react-native框架上,得到了非常好的實施效果。
本申請一種混合模型列表項重用的設(shè)備一優(yōu)選的實施例中,所述定義裝置1,用于對列表項的原型的結(jié)構(gòu)布局和樣式進行定義。在此,對列表項(listcell)的原型進行定義包括對列表項的結(jié)構(gòu)和樣式進行定義,實現(xiàn)混合模型(hybrid)開發(fā)中前端對listcell靈活自由地進行定義。
本申請一種混合模型列表項重用的設(shè)備一優(yōu)選的實施例中,所述列表項的原型為單個列表項的原型。在此,在前端層,僅僅創(chuàng)建了列表項的原型這一個實例,后續(xù)可在原生端也僅僅基于這個原型創(chuàng)建一個列表項模板,然后在需要時對該列表項模板進行復(fù)制,從而可以節(jié)省下創(chuàng)建和布局新列表項所需的內(nèi)存和時間,提升性能。
本申請一種混合模型列表項重用的設(shè)備一優(yōu)選的實施例中,所述復(fù)制及復(fù)用裝置2,用于根據(jù)所述列表項的原型創(chuàng)建列表項模板;對所述列表項模板進行復(fù)制得到列表項;將獲取到的列表項內(nèi)容填入復(fù)制得到列表項中,并顯示所述列表項。在此,如圖3所示,在原生端僅僅基于前端定義的原型創(chuàng)建列表項模板即圖中的listcell原型實例,然后根據(jù)需要顯示的列表項內(nèi)容的多少對該列表項模板進行復(fù)制,得到相應(yīng)數(shù)量的列表項,再將所述列表項內(nèi)容即圖3中的列表項數(shù)據(jù)1~n分別填入對應(yīng)的列表項中后進行渲染顯示,從而可以節(jié)省下創(chuàng)建和布局新列表項所需的內(nèi)存和時間,提升性能。
本申請一種混合模型列表項重用的設(shè)備一優(yōu)選的實施例中,所述復(fù)制及復(fù)用裝置2,用于遍歷獲取列表項模板的所有子視圖;創(chuàng)建包含所有子視圖及其屬性的列表項。在此,遞歸遍歷列表項模板的所有子view(視圖),再復(fù)制一份列表項出來包含所有子視圖及每個子視圖對應(yīng)的屬性,從而實現(xiàn)對列表項的準(zhǔn)確復(fù)制。具體的,如圖4所示,列表項模板即圖4中的listcell 原型的子視圖包括a、b、c、d、e,復(fù)制listcell原型即是創(chuàng)建包含listcell原型的所有子視圖及其屬性的列表項的過程,得到的列表項的子視圖包括a’、b’、c’、d’、e’。
本申請一種混合模型列表項重用的設(shè)備一優(yōu)選的實施例中,所述復(fù)制及復(fù)用裝置2,用于將獲取到列表項內(nèi)容填入創(chuàng)建后的列表項的對應(yīng)的各個子視圖中。在此,可根據(jù)列表項內(nèi)容,將列表項內(nèi)容分別填入復(fù)制出來的列表項中的各對應(yīng)子視圖中,從而實現(xiàn)列表項內(nèi)容在列表項中相應(yīng)位置的準(zhǔn)確顯示。具體的,如圖4所示,本實施例中,將列表項內(nèi)容即圖4中的內(nèi)容數(shù)據(jù)分別填到復(fù)制得到的列表項的各對應(yīng)的子視圖a’、b’、c’、d’、e’中。
本申請一種混合模型列表項重用的設(shè)備一優(yōu)選的實施例中,所述列表項內(nèi)容從所述前端獲取。在此,如圖3所示,前端除了完成列表項的原型的定義,只要將列表項內(nèi)容即圖3中的列表項數(shù)據(jù)傳遞至原生端即可,從而減少前端數(shù)據(jù)處理的內(nèi)存消耗和時間消耗。
本申請一種混合模型列表項重用的設(shè)備一優(yōu)選的實施例中,所述復(fù)制及復(fù)用裝置2,用于根據(jù)顯示區(qū)域能容納顯示的列表項的數(shù)量,來確定復(fù)制得到列表項的數(shù)量。在此,尤其在顯示區(qū)域首次顯示列表項時,由于還沒有可復(fù)用列表項,此時需要根據(jù)顯示區(qū)域能容納顯示的列表項的數(shù)量,來復(fù)制對應(yīng)數(shù)量的列表項,例如,圖3中根據(jù)一屏能顯示的列表項的數(shù)量確定生成對應(yīng)數(shù)量的列表項,從而實現(xiàn)列表項的按需復(fù)制,節(jié)省下創(chuàng)建和布局新列表項所需的內(nèi)存和時間,提升性能,例如,有10個列表項內(nèi)容需要顯示,某一個顯示區(qū)域能容納顯示的列表項的數(shù)量為10個,那么此時需要復(fù)制10個的列表項。
本申請一種混合模型列表項重用的設(shè)備一優(yōu)選的實施例中,所述復(fù)制及復(fù)用裝置2,用于當(dāng)有列表項內(nèi)容移出所述顯示區(qū)域,將該移出的列表項內(nèi)容所屬的列表項回收為可復(fù)用的列表項;當(dāng)有新的列表項內(nèi)容要移入所述顯示區(qū)域,判斷是否有可復(fù)用的列表項,若有,將所述新的列表項內(nèi)容填入所述可復(fù)用列表項,顯示所述列表項;若無,對所述列表項模板進行復(fù)制得到列表項,將新的列表項內(nèi)容填入復(fù)制得到列表項中,顯示所述列表項。在此,如圖3所示,尤其在顯示區(qū)域首次顯示列表項之后,由于此時可能已經(jīng)有了可復(fù)用列表項,顯示新的列表項內(nèi)容時利用可復(fù)用列表項即可,即在列表滾動過程中循環(huán)復(fù)用移動顯示區(qū)域的列表項,從而,進一步節(jié)省下創(chuàng)建和布局新列表項所需的內(nèi)存和時間,提升性能,當(dāng)然,如果沒有可復(fù)用的列表項,那么需要根據(jù)新的列表內(nèi)容對所述列表項模板進行復(fù)制得到對應(yīng)數(shù)據(jù)列表項,例如,有15個列表項內(nèi)容需要顯示,某一個顯示區(qū)域能容納顯示的列表項的數(shù)量為10個,首次顯示時需要復(fù)制10個的列表項,以顯示其中10個列表項內(nèi)容,當(dāng)剩余的5個列表項內(nèi)容需要顯示移入顯示區(qū)域時,相應(yīng)會有5個已經(jīng)顯示過的列表項內(nèi)容移出顯示區(qū)域,這5個移出顯示區(qū)域的列表項會可回收為可復(fù)用的列表項,那么剩余的5個列表項內(nèi)容即可復(fù)用該5個可復(fù)用的列表項。
綜上所述,本申請通過在前端實現(xiàn)列表項的原型定義,在原生端通過對列表項的原型的復(fù)制,原生端根據(jù)當(dāng)前列表展現(xiàn)的位置,對于已經(jīng)不在可見范圍的列表項進行重用,來實現(xiàn)在前端定義列表項的原型,而在原生端自由的創(chuàng)建、渲染和復(fù)用列表項,達到了既保留了混合模型開發(fā)對列表項定義的靈活自由,又可以在原生端復(fù)用列表項,大大提升了大列表的展現(xiàn)和操作性能。本申請技術(shù)方案的核心,是在混合模型開發(fā)中,解決在前端定義列表項的結(jié)構(gòu)和樣式,而在原生端進行列表項的創(chuàng)建和復(fù)用的問題,以達到在列表頁面中復(fù)用列表項,提升渲染和操作的性能。
顯然,本領(lǐng)域的技術(shù)人員可以對本申請進行各種改動和變型而不脫離本申請的精神和范圍。這樣,倘若本申請的這些修改和變型屬于本申請權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請也意圖包含這些改動和變型在內(nèi)。
需要注意的是,本申請可在軟件和/或軟件與硬件的組合體中被實施,例如,可采用專用集成電路(asic)、通用目的計算機或任何其他類似硬件設(shè)備來實現(xiàn)。在一個實施例中,本申請的軟件程序可以通過處理器執(zhí)行以實現(xiàn)上文所述步驟或功能。同樣地,本申請的軟件程序(包括相關(guān)的數(shù)據(jù)結(jié)構(gòu))可以被存儲到計算機可讀記錄介質(zhì)中,例如,ram存儲器,磁或光驅(qū)動器或軟磁盤及類似設(shè)備。另外,本申請的一些步驟或功能可采用硬件來實現(xiàn),例如,作為與處理器配合從而執(zhí)行各個步驟或功能的電路。
另外,本申請的一部分可被應(yīng)用為計算機程序產(chǎn)品,例如計算機程序指令,當(dāng)其被計算機執(zhí)行時,通過該計算機的操作,可以調(diào)用或提供根據(jù)本申請的方法和/或技術(shù)方案。而調(diào)用本申請的方法的程序指令,可能被存儲在固定的或可移動的記錄介質(zhì)中,和/或通過廣播或其他信號承載媒體中的數(shù)據(jù)流而被傳輸,和/或被存儲在根據(jù)所述程序指令運行的計算機設(shè)備的工作存儲器中。在此,根據(jù)本申請的一個實施例包括一個裝置,該裝置包括用于存儲計算機程序指令的存儲器和用于執(zhí)行程序指令的處理器,其中,當(dāng)該計算機程序指令被該處理器執(zhí)行時,觸發(fā)該裝置運行基于前述根據(jù)本申請的多個實施例的方法和/或技術(shù)方案。
對于本領(lǐng)域技術(shù)人員而言,顯然本申請不限于上述示范性實施例的細節(jié),而且在不背離本申請的精神或基本特征的情況下,能夠以其他的具體形式實現(xiàn)本申請。因此,無論從哪一點來看,均應(yīng)將實施例看作是示范性的,而且是非限制性的,本申請的范圍由所附權(quán)利要求而不是上述說明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化涵括 在本申請內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標(biāo)記視為限制所涉及的權(quán)利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數(shù)不排除復(fù)數(shù)。裝置權(quán)利要求中陳述的多個單元或裝置也可以由一個單元或裝置通過軟件或者硬件來實現(xiàn)。第一,第二等詞語用來表示名稱,而并不表示任何特定的順序。