[開源中國]android客戶端改造-2

曾經我也是個菜鳥,曾經我也是從網上搜來別人的博客的內容來解決問題,作的項目,不少都來自開源的項目,若是沒有這麼多熱情的無私的人奉獻本身的知識,軟件業也不會有這麼大這麼快的進步,今天我雖不能貢獻太多的力量,可是但願個人綿薄之力能對須要的人有所幫助。 框架

重構osc的代碼的緣由是,我原本想作一個客戶端,借用一下osc的框架,結果發現很難、很複雜,因而我開始了重構,但願這個重構的版本能給快速開發基礎界面起到基礎性做用,做爲一個基礎的工程,減小結構上的代碼編寫,規範結構,騰出精力進行業務邏輯的編寫。 佈局

下面是示例界面: .net

 

爲了能讀懂這片文章,先介紹幾個概念 線程

UML中的【MainHeader】就是下面的界面 對象

 

UML中【FrameHead】就是下面的界面 blog

說明,這個和下面介紹的RadioFoot,都是動態添加按鈕的,因此佈局也是支持動態的計算從而充滿屏幕的,如今就是一個例子,裏面只有兩個按鈕,所有充滿了屏幕。 繼承

UML中【RadioFoot】就是下面的界面 事件

 

對應的UML類圖以下 圖片

 

 

在上次的基礎上進一步將osc的代碼進行重構,重構了以下方面: 開發


一、將adapter包中的各個類分到了各個模塊的包中,儘可能使各個包獨立,依賴儘可能少
二、進一步重構了frame,將上面的導航抽出來造成了類圖中的FrameHead
三、每一個欄目的頭部導航沒有任何區別將其寫在layout裏不符合代碼的重用的精神,徹底能夠抽出,並且避免了增長一個模塊就須要增長一個layout。
四、不管是news,question仍是tweet總結一下佈局都是同樣的,一個LinearLayout(表示頭部的導航,如今抽象出來的FrameHead)和一個PullToRefreshListView(用於加載列表),徹底沒有必要建立那麼多的佈局,因此抽象出來,一是能夠減小布局,清晰結構,同時後面能夠動態的添加模塊,動態的爲用戶添加功能,作到不一樣用戶的不一樣界面。關於frameHead(參見UML)也不用像如今這樣寫framebtn_News_lastest,能夠維護一個map,將不一樣的模塊映射到map上,再進一步獲取button的引用便可,如今定義例如:
  private Button framebtn_News_lastest;
  private Button framebtn_News_blog;
  private Button framebtn_News_recommend;

具體實現參見代碼。

五、 關於 PullToRefreshListView中的lv_footer lv_foot_more lv_foot_progress,不一樣的模塊列表使用的都是同一個,徹底沒有必要重複的在不一樣的地方出現相同的代碼,因此抽出來放到抽象類BaseFrame中,同時也減小了構造參數的個數,並且重構後,一不影響界面,而不影響功能,三開發者只要繼承父類便可不用編寫任何代碼設置foot,也能夠不知道他的存在。

六、不一樣的模塊能夠仿照NewsMain編寫,後臺線程執行的獲取內容經過thread開啓,處理返回的數據使用handleLvData處理,因爲handleLvData在BaseFrame中是抽象方法,因此實現的類中實現了,就很好的避免了原來的if else switch case的問題。

七、framehead中不一樣模塊的按鈕在Main中經過一個Map維護,維持引用,當切換界面使frameHead中的按鈕不一樣的時候,就採用remove和將Map中須要的添加進來便可,避免 了對象的重複建立,也能夠實現動態導航,避免了重複寫layout的問題

八、上次的版本中 head中的 ProgressBar 的顯示沒有調,此次搞好了,數據加載顯示,加載完消失

九、BaseNavBar採用泛型進行抽象,做爲了framehead和RadioFoot的父類,這樣代表,之後再作相似的不管是Button類的仍是RadioButton類型的導航,仍是本身定義圖片類型的導航,徹底能夠通用,直接繼承模仿實現便可。減輕了開發導航的難度

十、NewsMain做爲新聞模塊的主要邏輯實現它須要修改主類Main的UI的東西和上下文,因此須要依賴他,須要在加載數據的時候顯示MainHead中的進度條,因此須要依賴他,當點擊FrameHead中的按鈕例如【最新資訊】的時候須要更新列表中的數據,列表數據更新的行爲應該屬於新聞模塊本身,因此放到了NewsMain中,就在NewsMain中定義了事件點擊事件,可是發現點擊事件必需要修改被點擊按鈕的狀態,那麼這樣就會致使NewsMain中須要有FrameHead的引用了,這樣就亂了,點擊按鈕更新本身,應該是本身的行爲,至於須要修改別處的數據,那這個就又是別處本身的事了,這個就是自掃門前雪了,因此NewsMain從邏輯分析上是不須要持有FrameMain中的引用的,因此最後改爲了FrameHead按鈕本身更新本身狀態,點擊【最新資訊】新聞本身處理本身的數據,這樣就比較好了,減小了依賴。具體實現參考代碼。

備註:

    紅薯,大哥我歷來沒有用過代碼分享,他老是提示我比較晚了洗洗睡吧,我確實困了,提交代碼還要片斷啊,打包的上傳不了啊,暈了,沒找到,仍是放到別處你們下載吧,你們請見諒,不是有意的。

下載地址:

http://download.csdn.net/detail/zyq_1/5638071

相關文章
相關標籤/搜索