2011-07-10 41 views
2

我一直在使用Froyo(我的手機版)開發手機應用程序。我想切換到在項目中包含蜂窩。在手機應用程序中使用Android CursorLoaders和其他蜂窩功能(Froyo)

我已將Android兼容包導入到我的項目中。我目前的應用程序從SQLite數據庫中讀取。從所述數據庫加載圖庫和各種GridView和ListView。我不知道下一步該怎麼做。我是否將活動切換到FragmentActivities?我如何從當前的遊標移到CursorLoaders?這會如何影響我加載圖庫和網格/列表視圖的自定義適配器?等...

我會很感激任何幫助和建議,你可以給。我很難理解如何轉換我擁有的東西,並讓兩者共存。我真的很想做到「正確的方式」。

編輯:我意識到這是一個相當廣泛的「問題」。所以,讓我們專注於Cursor到CursorLoader的事情。我會爲其他項目創建新的問題。

回答

-1

你想讓你的應用在Froyo和Honeycomb上運行嗎?或僅切換到蜂窩?

如果您只想在Honeycomb設備上運行,您只需將其所有已棄用的方法調用(Activity.managedQuery())替換爲其蜂窩替換(CursorLoader)即可。

如果您想在兩個版本的Android(或更早版本)上運行,那麼您可以使用反射。基本反射測試是否在當前系統上提供特定的方法或類(例如CursorLoader),並允許您決定在每種情況下應採取的措施。下面是關於反射的教程:http://mobile.tutsplus.com/tutorials/android/java-reflection/

或者,您可以簡單地使用不推薦使用的方法,它們應該在Honeycomb上正常運行。查詢here瞭解有關最大化與Honeycomb的應用程序兼容性的更多信息,包括確保應用程序填滿屏幕並允許使用操作欄。

+0

我想使它成爲手機和平板電腦兼容。我知道遊標「可以」蜂窩工作,但是從我讀過它的建議在使用兼容包(如[這裏](http://stackoverflow.com/questions/5603504/android表示移動到裝載機和LoaderManagers -3-0 - 什麼 - 是 - 使用的 - - 優點 - 的 - loadermanager-情況下,完全一致))。我只是不知道如何去做轉換。似乎裝載機只能用於碎片? – Metallicraft

+0

我目前正在開發一個適用於Honeycomb及以下版本的應用程序(包括操作欄支持)。我使用遊標來進行數據庫調用,雖然它們容易出錯,但它們通常是可以避免的。如果你想使用裝載機,那麼你將需要使用反射。你在哪裏讀過它們只能用於碎片?根據[文檔](http://developer.android.com/reference/android/app/LoaderManager.html),它們也可用於「活動」。 – howettl

+0

我不知道,我讀他們只提供給片段,但是當我試圖用裝載機來代替我的光標,我有錯誤,直到我改變了我的活動到fragmentactivity。我本來可以做一些完全錯誤的事情。 – Metallicraft

5

使用兼容性庫我使用了CursorLoader和Fragments,目標爲2.1。

如果你有一個ContentProvider的支持,裝載機是非常容易的,Fragments需要使用FragmentActivity(也許LoaderCursors也是如此)。

不過,LoaderManager需要LoaderManager.LoaderCallbacks接口。

裝載機有一個生命週期,我沒有手頭的代碼,但它是這樣的。

LoaderManager.InitLoader(USER_SPECIFIED_ID_OF_LOADER); 

----最終調用--->

Loader<Cursor> onCreateLoader(int id, Bundle args) { 
     return new CursorLoader(getActivity(), baseUri, 
      CONTACTS_SUMMARY_PROJECTION, select, null, 
      Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"); 
} 

這是你的加載器及其加載程序的事情,我只在我的代碼中使用CursorLoader所以我不知道更多關於堅韌的細節。

加載程序完成後,調用最終回調函數。

public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 
    //Do whatever you want with your cursor here. 
} 

這就是說,他們工作得很好,做他們的工作正如所料,兩個大拇指。

*編輯:還有一個onLoaderRestarted()當您重新啓動加載程序,不知道什麼時候,它被稱爲是可能被調用。

+0

我在應用程序中使用SQLite數據庫,我在加載器中使用什麼URI?或者更好的是,有一個使用CursorLoader和SQLite數據庫的例子,你知道嗎? – Metallicraft

+1

我可以給你的最好的答案是你需要實現一個ContentProvider來連接SQLite數據庫,以便使用帶有uri的CursorLoader。 MOTODEV工作室提供的代碼生成設施的SQL精簡版數據庫的並把他們變成數據庫接口類及內容提供商,都沒有使用它,但它是值得看的,如果你有一個數據庫,並希望很快使內容提供商。 – HaMMeReD

相關問題