付費(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 酒店客房服務(wù)與質(zhì)量規(guī)范手冊
- 兒童醫(yī)院志愿者服務(wù)體系建設(shè)方案
- 兒童醫(yī)院藝術(shù)療法空間建設(shè)方案
- 航空運(yùn)輸貨物操作流程
- 小學(xué)職業(yè)體驗空間建設(shè)方案
- 鋼結(jié)構(gòu)施工機(jī)械選用及配置方案
- 兒童醫(yī)院消防安全設(shè)施提升方案
- 醫(yī)院職工心理健康關(guān)懷方案
- 企業(yè)安全生產(chǎn)標(biāo)準(zhǔn)化建設(shè)實施步驟
- 中醫(yī)院信息化培訓(xùn)實施方案
- 2025年國家能源局公務(wù)員面試模擬題及解析
- 2025外研社小學(xué)英語三年級下冊單詞表(帶音標(biāo))
- 承包檳榔園合同轉(zhuǎn)讓協(xié)議書
- 鵬城實驗室雙聘管理辦法
- 隧道滲漏檢測技術(shù)-洞察及研究
- x探傷安全管理制度
- 財政分局對賬管理制度
- 噴水機(jī)車間管理制度
- 云師大附中 2026 屆高三高考適應(yīng)性月考(一)-地理試卷(含答案)
- 商業(yè)銀行反洗錢風(fēng)險管理自評估制度研究
- 2025年度法院拍賣合同模板:法院拍賣拍賣保證金退還合同
評論
0/150
提交評論