【移動應(yīng)用開發(fā)技術(shù)】android UI更新的方法_第1頁
【移動應(yīng)用開發(fā)技術(shù)】android UI更新的方法_第2頁
【移動應(yīng)用開發(fā)技術(shù)】android UI更新的方法_第3頁
全文預(yù)覽已結(jié)束

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

【移動應(yīng)用開發(fā)技術(shù)】androidUI更新的方法

本篇內(nèi)容介紹了“androidUI更新的方法”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓在下帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!之前有段時間寫Windows桌面程序悟出的道理。是這樣的,有時候,我們需要創(chuàng)建一個符合業(yè)務(wù)的View,或者稱為UI對象,比如,即時通訊軟件的好友列表里面的每個item,那么這個item要有頭像,名字,簡短描述三個數(shù)據(jù)項。那么,我們這個View對象,就得有三個對應(yīng)的方法來設(shè)置這三個屬性,然后View顯示的時候,就顯示出我們***的數(shù)據(jù)就好了。最最最開始的時候,我都是耿直的寫成這樣。//

以下是偽代碼的形式,并不嚴(yán)謹(jǐn)

class

UserItemView

extends

View

{

ImageView

mAvatar;

TextView

mName;

TextView

mDesc;

public

void

setAvatar(Bitmap

avatarImage)

{

mAvatar.setImage(avatarImage);

}

public

void

setName(String

name)

{

mName.setText(name);

}

public

void

setDesc(String

desc)

{

mDesc.setText(desc);

}

}在最開始的時候,這樣是OK的,看起來非常***,沒有任何問題。如果某個用戶的數(shù)據(jù)變了,就更新某個數(shù)據(jù)就好了。好,現(xiàn)在問題了,這樣寫的問題在于,當(dāng)狀態(tài)/數(shù)據(jù)之間相互依賴對UI的顯示產(chǎn)生影響時,那么就會出問題,代碼會混亂。我們現(xiàn)在提個這樣的需求,如果描述(desc)是空的,就顯示出頭像,如果不是空的,就不顯示頭像。需求確實很奇怪,但是實際的工作中一定會遇到類似的情況。那么,首先我們想當(dāng)然的改動一下代碼吧。class

UserItemView

extends

View

{

ImageView

mAvatar;

TextView

mName;

TextView

mDesc;

String

mDescData;

public

void

setAvatar(Bitmap

avatarImage)

{

mAvatar.setImage(avatarImage);

}

public

void

setName(String

name)

{

mName.setText(name);

}

public

void

setDesc(String

desc)

{

mDescData

=

desc;

if

(mDescData

==

null

||

mDescData

.equals(""))

{

mAvatar.setVisible(true);

}

else

{

mAvatar.setVisible(false);

}

mDesc.setText(mDescData

);

}

}你看,現(xiàn)在設(shè)置描述的方法里要去管頭像的顯示情況,這就很惡心了。如果有更多的數(shù)據(jù)項和狀態(tài),更多的UI控件,他們之間有非常多的依賴關(guān)系,如果按這樣的寫法,你的每個方法里面的邏輯都會變得非常惡心,復(fù)雜。甚至,設(shè)置某個UI的狀態(tài)還需要依賴其他的數(shù)據(jù)項,你沒辦法,只能把無關(guān)的數(shù)據(jù)當(dāng)參數(shù)傳入,就會變成這樣。//

?。。”ǎ。。槭裁搭^像要關(guān)注其他的數(shù)據(jù)?。?!

public

void

setAvatar(Bitmap

avatarImage,

String

desc)

{

mAvatar.setImage(avatarImage);

if

(desc==

null

||

desc.equals(""))

{

mAvatar.setVisible(true);

}

else

{

mAvatar.setVisible(false);

}

}當(dāng)時,我那個UI已經(jīng)變得非常惡心了,在這樣的情況下,我終于意識到,對UI對象的更新,不能就地去做,UI對象的更新,應(yīng)該用一個統(tǒng)一的方法來做,而會改變UI顯示情況的那些setXXXX方法,只做兩件事,一是把數(shù)據(jù)設(shè)到這個對象的成員屬性上,另一件事就是調(diào)用統(tǒng)一的方法來更新UI。其實一個標(biāo)準(zhǔn)的設(shè)計一直在眼前,直到那一刻,我才意識到和真正的理解。那就是Android中的View。Android中的每個View的子類,都有超級多的set方法,比如TextView,就有setText,setTextColor等等。它就是每個set方法,實際上是給這個對象做一個數(shù)據(jù)上的變化,然后就不管了。等到系統(tǒng)來調(diào)用OnDraw方法的時候,在OnDraw方法中統(tǒng)一的來更新UI。接下來就簡單了。我們的代碼改成這樣:class

UserItemView

extends

View

{

ImageView

mAvatar;

TextView

mName;

TextView

mDesc;

String

mNameData;

String

mDescData;

Bitmap

mAvatarData;

public

void

updateView()

{

mAvatar.setImage(mAvatarData);

if

(mDescData==

null

||

mDescData.equals(""))

{

mAvatar.setVisible(true);

}

else

{

mAvatar.setVisible(false);

}

mDesc.setText(mDescData);

mName.setText(mNameData);

}

public

void

setAvatar(Bitmap

avatarImage)

{

mAvatarData

=

avatarImage;

updateView();

}

public

void

setName(String

name)

{

mNameData

=

name;

updateView();

}

public

void

setDesc(String

desc)

{

mDescData

=

desc;

updateView();

}

}注意到,添加了一個updateView方法,這個方法專門用來將數(shù)據(jù)更新到UI上,這樣寫,其他set方法一律只做把數(shù)據(jù)存進(jìn)來的事情,updateView方法專門根據(jù)當(dāng)前的數(shù)據(jù)狀態(tài)更新UI,這樣set方法就干凈整潔。而邏輯再復(fù)雜的顯示邏輯,都不用怕,在updateView里面搞就行了。我曾經(jīng)并且一直在維護(hù)的一個Activity,它大概有15+個View,20-30個數(shù)據(jù)和狀態(tài),這些數(shù)據(jù)和狀態(tài)會謎一般的印象著這些view的顯示。當(dāng)時年輕不懂事,就耿直的在數(shù)據(jù)變化的后面(下一行),立馬就更新UI的狀態(tài)。有如下這些位置吧:點(diǎn)擊事件系統(tǒng)回調(diào)網(wǎng)絡(luò)請求回調(diào)定時器,handler這么多地方都在更新數(shù)據(jù),并且改變UI,維護(hù)起來簡直要屎。后來,在我領(lǐng)悟到上面這個技巧后,我重構(gòu)了一波,里面有個超級大的updateView方法,然后對每個View進(jìn)行更新。這里有另一個小技巧,就是你有1w個View,和1w個狀態(tài)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論