(今天這篇文章好雞肋阿!)
比起決定要不要使用最新觀念、最新套件,以下幾件事情務必要注意:
1.實作每個常用介面跟物件。
例如要實作一個OnClickListener——假設稱它為ProjectClick,然後每個要使用OnClickListener的地方就不要直接實作OnClickListener,改實作ProjectClick。
abstract class ProjectClick implements OnClickListener{
void onClick(View v){
click(v);
}
abstract click(View v);
}
這樣做的目的是...用個假設情境說明...「專案中途忽然希望:別鎖著畫面,但又不希望使用者連續點擊、連續啟動特定功能。這時候就可以修改ProjectClick,也只需要修改這一次,就可以讓所有Click都有『避開連續點擊』的效果。」
abstract class ProjectClick implements OnClickListener{
long lastClick = System.currentTime();//是這個函數嗎?
void onClick(View v){
long thisClick = System.currentTime();
if(thisClick - lastClick > 1000)
click(v);
lastClick = thisClick;
}
abstract click(View v);
}
同樣的原則也可以適用在各種Adapter、Activity、跟Fragment。
2.實作一套更新畫面的機制。
例如現在Activity提供了「runOnMainUI」這個方法,那就不要每次都實作一個Runnable,而是改用一個制式的Runnable實作,假設稱為UiRunner。
interface UiJob{
void job();
}
static ArrayList<UiJob> JobList = ....
class UiRunner implements Runnable{
void run(){
for(UiJob job : JobList){
job.job();
}
JobList.clear();
}
}
然後將所有更新介面的動作都做成任務,放在佇列中讓這個Runner執行。(下面只用「更新TextView的動作」當範例。)
class TextJob implement UiJob{
TextView text;
String value;
TextJob(TextView t, String v){
text = t;
value = v;
JobList.add(this);
}
void job(){
text.setText(value);
}
}
未來,需要更新TextView時,只要執行TextJob的宣告即可。
new TextJob(text, string);
(以此類推,也可以用來更新ImageView或ListView。)
為什麼要這樣做?
可以避免程式碼中出現一堆「Runnable」的匿名物件,更可以將程式碼的重用度提高。
(其實每個人都應該自己靠經驗去建立自己的原則。把自己的原則拿出來分享好像怪怪的。)