2011-04-28 48 views
1

我正在開發Android應用程序,並面臨重構問題;我的大部分活動都需要特定的通知功能,即顯示Toast消息。這是通過其延伸活動需要合適的Android模式

活動

-NotificationActivity

--MyActivityA

--MyActivityB

等超類處理。然後我決定重構我的兩個活動,這些活動使用由數據庫光標填充的Spinner。層次結構現在看起來是這樣的:

活動

-MyNotificationActivity

--MyActivityA

--MyActivityB

--MySpinnerActivity(設置微調和Cursor)

--- MySpinnerActivityA

--- MySpinnerActivityB

我現在面臨的問題是這樣的 - 我正在寫一個新的Activity類,它也將使用數據庫遊標,但填充ListView。我想擴展ListView以利用內置的Android List管理,但是我還需要訪問Cursor的設置方法和通知方法,這些方法和方法已經存在於我的類層次結構中。

我真的很想避免代碼重複。有什麼建議麼?

乾杯, 巴里

+0

想過 - 我可以嘗試讓我的超類NotificationActivity擴展ListActivity而不是Activity。不是很好,但我的其他活動都不需要列表。 – barry 2011-04-28 19:33:10

回答

1

在處理類似的問題(一幫其顯示ProgressDialogs活動),我避免延伸至與該ProgressDialog功能的超類。

相反,我寫了一個單獨的類「LoadingDialog」來處理它。在每個需要此功能的Activity中,它都會有一個類LoadingDialog的實例作爲字段。而且,對於任何依賴於上下文或活動的功能,活動可以將引用傳遞給自己,或者根據需要公開其他位。

在你的情況下,也許你可以寫一些封裝常用功能的「ToasterFunctionClass」,並在每個適當的活動中包含它的一個實例。

public class ListStuff extends ListActivity { 

    private ToastFunctionClass toaster = new ToastFunctionClass(this); //pass yourself so that toaster has a Context in which to do UI stuff. 

    onSomethingHappened() { 
     toaster.showToast("Something happened"); 
    } 

} 
+0

感謝cephron,我會放棄這一點。 – barry 2011-04-29 08:58:54