2015-08-16 66 views
1

我必須在Android中實現樹型瀏覽器。對於這種特殊情況,樹會是一個文件夾層次結構。因此,用戶將從根目錄開始,並能夠瀏覽整個層次結構。瀏覽文件夾樹的活動/導航策略

我有iOS開發經驗,這可能使用UINavigationController來完成,每一個用戶點擊一個文件夾的時間推動一個新的控制器,但我不知道,如果使用的Android相同的策略是做正確的事。

我的第一個想法是有一個FolderViewActivity,用根路徑創建第一個,每次用戶點擊一個文件夾時,用新路徑創建一個新文件夾。所以你有一堆活動,如果用戶想要上去,當前的活動將結束,並且之前的活動將被顯示。

這是正確的做法嗎?可以用後退按鈕做這個問題嗎?

我在github上看到了一些實現文件瀏覽器的項目,似乎每個人都試圖重複使用單一活動來完成所有工作,用戶點擊文件夾時用新數據更新適配器。對我來說,這是一個糟糕的實現,除非有足夠的理由去做(Android特有的東西?)

回答

0

在Android中,您應該儘可能少地使用活動。 Activity是一個相當昂貴的對象,只有在需要使用特定的上下文時使用一些不同的設置(方向,操作欄)或者如果您想要做一些新的事情(例如,編輯文件內容或顯示設置),它才應該實例化。

當您瀏覽文件樹時,您實際上每次都執行相同的操作:使用某個路徑顯示目錄內容。對於此例程,您應該使用Fragment s(http://developer.android.com/guide/components/fragments.html)這樣的輕量級和可重用對象。

這種方法的好處是:更少的內存,更便宜的通話(創建或銷燬活動),更快速,更靈活,您可以按自己喜歡的方式處理後退按鈕。

所以你不應該創建一堆活動,你應該創建一個活動,然後替換每個新文件夾的片段。

+0

你對此有何評論? https://corner.squareup.com/2014/10/advocating-against-android-fragments.html – louissmr

+0

總是有很多優點和反對意見,但用碎片編寫) – anil

0

我正在使用recyclerview做同樣的事情。無需片段或活動。 Firs加載根,點擊後需要用新的子對象更新回收者視圖的適配器。您可以保留一個導航堆棧以獲得導航策略。

+0

當用戶返回時,如何保持滾動前一個文件夾的狀態?如果從服務器接收到內容(包括圖像和此類內容),會發生什麼情況?您是否必須在導航堆棧中對所有這些進行建模? – louissmr

+0

我有堆棧,導航所需的最少信息(文件夾ID和文件夾名稱)。如果您從服務器收到一些信息,則應重新載入數據並顯示更新的適配器。 recyclerview非常靈活,可以讓你做任何事情。 – Ilber