我正在尋找關於如何模塊化我的代碼的指導。我有一個活動和一個listAdapter,他們變得相當複雜。我不確定哪些代碼應該在哪裏以及在這兩個類中彼此應該具有多少知識。您如何決定是否將代碼放入活動或其適配器中?你用什麼模式讓這些課程儘可能精益?這個代碼應該在哪裏 - 在我的Activity或我的適配器中?
回答
你的描述過於籠統,所以我不能給你一個確切的答案(對於解釋爲什麼他們變得越來越大,額外的代碼有什麼好處)。
但是一般來說,只要想想每個班級應該做什麼。 「活動」(就像我看到的那樣)是一個主控制器,它「知道所有人」,並且將其他組件(ListView與列表適配器)連接在一起。列表適配器的目的僅僅是將數據映射到視圖。如果他們變得越來越大,提取新的(實用)類。例如,假設ListAdapter格式時間戳中的很大一部分代碼(例如,將時間戳記作爲長整型值,並基於當前時間創建一個像「2小時前」的字符串)。然後創建一個名爲TimeFormat的新實用程序類(帶有一個構造函數,它需要一個上下文,稍後需要它來獲取字符串資源)是有意義的。然後ListAdapter將創建這個類的一個實例。
另一個例子是數據保存。在這種情況下,您可以創建一個名爲「Model」或「Document」的類(再次,構造函數採用「Context」實例)。它將負責(例如)通過parsin XML文件加載數據,並通過生成XML文件來保存數據。在這種情況下,這個類將被活動實例化。
另請注意,ListAdapter應該真的做它應該做的事情:基於數據創建/設置視圖。它不應該依賴於其他視圖(在其他視圖中,它應該可以在任何佈局文件中使用任何ListView)。因此,如果您有「findViewById」調用,該調用訪問ListView(或ListView本身)之外的視圖,那麼應將該代碼移至該活動。另外,如果有疑問,你可以嘗試找到一個相對成熟的開源應用程序,並做類似的事情(並且看看它是如何解決問題的)。
適配器對象充當一個AdapterView和該視圖的基礎數據之間的橋樑。適配器提供對數據項的訪問。適配器還負責爲數據集中的每個項目製作視圖。
因此,如果您的代碼與獲取數據來顯示或創建視圖有關,那麼它就在適配器中。一切都在活動或其他地方。如果您花費大量代碼檢索要顯示的信息,請考慮使用某種AsyncTaskLoader類。請注意,使用android compatibility package可以從小於3.0的API級別訪問加載器類。
- 1. 我應該將我的代碼放在Activity或View中嗎?
- 2. 我應該在哪裏放AutoLayout代碼?
- 3. 我應該在哪裏放置代碼?
- 4. Mvc模式:我應該在哪裏放置這個php代碼?
- 5. 我應該在哪裏放這個代碼?
- 6. 我應該在哪裏放這個JavaScript?
- 7. 我應該在哪裏設置DataContext - 後面的代碼或xaml?
- 8. 我應該在哪裏將我的代碼放在ActionBar.TabListener
- 9. 我在哪裏出錯這個代碼
- 10. ListView沒有得到更新,我應該在哪裏調用notifyDataSetChanged(),我應該在哪裏設置適配器?
- 11. 我應該在哪裏設置我的代碼上的listView?
- 12. 我應該在哪裏放這段代碼?
- 13. 我應該在哪裏放置我的功能代碼
- 14. 我應該在哪裏放置我的JavaScript代碼?
- 15. 我應該在哪裏放置我的初始化代碼?
- 16. 我應該在哪裏設置這個配置?
- 17. 我應該在哪裏存儲我的underscore.js迭代器?
- 18. 我應該在哪裏將這個庫放在我的android應用程序中?
- 19. 我應該使用哪個適用於Ruby的CouchDB適配器?
- 20. 我應該在哪裏把我的UpdatePanel
- 21. 我應該在哪裏放驗證碼?
- 22. 我應該在哪裏找到我在asp.net中的石英代碼
- 23. 我應該在哪裏將Google分析代碼放在我的母版頁中?
- 24. 我應該在cakephp 3中寫我的模型代碼在哪裏?
- 25. 我應該在哪裏將控制器代碼放在angularjs應用程序中
- 26. 我應該如何在Rails中實現業務邏輯層?我應該在哪裏放置這些代碼?
- 27. Angular JS - 我的代碼應該放在哪裏?
- 28. 我的用戶界面代碼應該放在哪裏?
- 29. 我在哪裏放置這個計數器增量代碼?
- 30. 在Oracle APEX接口中,我把這個代碼放在哪裏?