2011-07-10 11 views
2

私はFroyo(私の電話版)を使用して電話アプリで作業していました。私はこのプロジェクトにHoneycombを含めるように切り替えたいと思っています。電話アプリ(Androidアプリ)でAndroid CursorLoadersや他のHoneycomb機能を使用

Android Compatibility Packageを自分のプロジェクトにインポートしました。私の現在のアプリケーションはSQLiteデータベースから読み込みます。前記データベースからギャラリーおよび様々なGridViewおよびListViewをロードする。私は次に何をすべきかわからない。アクティビティをFragmentActivitiesに切り替えるのですか?現在のカーソルをCursorLoadersに移動するにはどうすればよいですか?これは、ギャラリーとグリッド/リストのビューを読み込むカスタムアダプターにどのように影響しますか?その他...

私はあなたに与えることができる助けとアドバイスをありがとうと思います。私は自分が持っているものをどのように変換するのかを掴み、両方を共存させることに問題があります。私は本当にそれを「正しい方法」にしたいと思っています。

EDIT:これはかなり広い "質問"です。ですから、Cursor to CursorLoaderのことに集中しましょう。私は他の項目について新しい質問を作成します。

答えて

-1

アプリをFroyoとHoneycombの両方で実行しますか?またはハニカムのみに切り替えますか?

ハニーコムデバイスでの実行のみに興味がある場合は、非推奨のメソッド呼び出し(Activity.managedQuery())をハニカムの置き換え(CursorLoader)に置き換えるだけで済みます。

Android(またはそれ以前)の両方のバージョンで実行する場合は、リフレクションを使用できます。基本的には、現在のシステムで特定のメソッドやクラス(CursorLoaderなど)が使用できるかどうかをリフレクションテストし、それぞれのケースで何をすべきかを決めることができます。反射についてのチュートリアルは次のとおりです:http://mobile.tutsplus.com/tutorials/android/java-reflection/

または単に廃止された方法を通常どおり使用することができ、Honeycombで正しく実行する必要があります。アプリが画面いっぱいになっていることを確認したり、アクションバーを使用できるようにするなど、ハニーコムとのアプリの互換性を最大限に高める方法についてはhereをチェックしてください。

+0

携帯電話とタブレットに対応したいと思っています。私はカーソルがハニカムで動作することができることを知っていますが、私が読んだところでは、互換性パッケージを使用している間は、LoaderおよびLoaderManagersに移動することをお勧めします(ここ[http://stackoverflow.com/questions/5603504/android -3-0-what-are-the-advantage-of-loadermanager-instances-exactly-of-using)を使用しています)。私はちょうど切り替えに行く方法を知らない。ローダーはFragmentsにしか使用できないようですね?? – Metallicraft

+0

私は現在、Honeycomb以下で動作するアプリケーションを開発中です(アクションバーのサポートを含む)。私はデータベース呼び出しのためにカーソルを使用していますが、エラーが発生しやすいものの、一般的には回避できません。ローダーを使用する場合は、リフレクションを使用する必要があります。読んだところ、彼らは断片にしか使えないのですか? [docs](http://developer.android.com/reference/android/app/LoaderManager.html)によれば、それらはActivitiesでも利用可能です。 – howettl

+0

私はそれらがFragmentsにしか使えないとは確信していませんが、カーソルをローダーで置き換えようとしたときに、私の活動が断片化に変わるまでエラーが発生しました。私は何か完全に間違っていた可能性があります。 – Metallicraft

5

互換性ライブラリでは、CursorLoaderとFragments 2.1を使用しました。

ローダーはContentProviderをサポートしていればかなり簡単ですが、FragmentsはFragmentActivity(おそらくLoaderCursors)を使用する必要があります。

ローダーには、LoaderManager.LoaderCallbacksインターフェースが必要です。

ローダーにはライフサイクルがありますが、手元にコードはありませんが、このようなものです。最終的にはこれはあなたのLoaderはそのローダことをした場合、私は私のコードでCursorLoaderを使用ので、私は詳細を知らないで

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

--->呼び出す

LoaderManager.InitLoader(USER_SPECIFIED_ID_OF_LOADER); 

----ぎこちない細部。

ローダーが終了すると、最終的なコールバックが呼び出されます。

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

言った、彼らはかなりうまく動作し、期待通り2足の親指アップ、自分の仕事をします。

*編集:ローダーを再起動したときにおそらく呼び出されるonLoaderRestarted()もあります。

+0

私はアプリでSQLiteデータベースを使用していますが、ローダのURIには何を使用しますか?それとも、あなたが気付いているSQLite dbでCursorLoaderを使用する例がありますか? – Metallicraft

+1

私があなたに与える最も良い答えは、CursorLoaderをuriで使用するためにSQLite dbとインターフェースするContentProviderを実装する必要があるということです。 Motodevスタジオは、sql-lite dbのコード生成機能を提供し、データベースインタフェースクラスとコンテンツプロバイダに変換しますが、まだ使用していませんが、データベースを持っていて、コンテンツプロバイダを素早く作成したいと考える価値があります。 – HaMMeReD

関連する問題