[解決済み] ContentProviderを使用しないCursorLoaderの使用方法
質問
Android SDKのドキュメントには、以下のように書かれています。
startManagingCursor()
メソッドはdepracatedであると書かれています。
このメソッドは非推奨です。代わりに LoaderManager を備えた新しい CursorLoader クラスを使用してください。これは、Android 互換性パッケージを通じて古いプラットフォームでも使用できます。このメソッドは、アクティビティのライフサイクルに基づいて、与えられたCursorのライフサイクルの管理をアクティビティが行うことを可能にします。つまり、アクティビティが停止すると、指定された Cursor に対して自動的に deactivate() が呼び出され、後で再起動すると、requery() が呼び出されるようになります。アクティビティが破棄されると、管理されているすべての Cursor が自動的に閉じられます。HONEYCOMB以降をターゲットにしている場合は、代わりにgetLoaderManager()で利用可能なLoaderManagerを使用することを検討してください。
というわけで、私は
CursorLoader
. しかし、どのようにカスタム
CursorAdapter
で、かつ
ContentProvider
のコンストラクタでURIを必要とする場合、そのURIは
CursorLoader
?
どのように解決するのですか?
私は シンプルなCursorLoader を書きました。
import android.content.Context;
import android.database.Cursor;
import android.support.v4.content.AsyncTaskLoader;
/**
* Used to write apps that run on platforms prior to Android 3.0. When running
* on Android 3.0 or above, this implementation is still used; it does not try
* to switch to the framework's implementation. See the framework SDK
* documentation for a class overview.
*
* This was based on the CursorLoader class
*/
public abstract class SimpleCursorLoader extends AsyncTaskLoader<Cursor> {
private Cursor mCursor;
public SimpleCursorLoader(Context context) {
super(context);
}
/* Runs on a worker thread */
@Override
public abstract Cursor loadInBackground();
/* Runs on the UI thread */
@Override
public void deliverResult(Cursor cursor) {
if (isReset()) {
// An async query came in while the loader is stopped
if (cursor != null) {
cursor.close();
}
return;
}
Cursor oldCursor = mCursor;
mCursor = cursor;
if (isStarted()) {
super.deliverResult(cursor);
}
if (oldCursor != null && oldCursor != cursor && !oldCursor.isClosed()) {
oldCursor.close();
}
}
/**
* Starts an asynchronous load of the contacts list data. When the result is ready the callbacks
* will be called on the UI thread. If a previous load has been completed and is still valid
* the result may be passed to the callbacks immediately.
* <p/>
* Must be called from the UI thread
*/
@Override
protected void onStartLoading() {
if (mCursor != null) {
deliverResult(mCursor);
}
if (takeContentChanged() || mCursor == null) {
forceLoad();
}
}
/**
* Must be called from the UI thread
*/
@Override
protected void onStopLoading() {
// Attempt to cancel the current load task if possible.
cancelLoad();
}
@Override
public void onCanceled(Cursor cursor) {
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
}
@Override
protected void onReset() {
super.onReset();
// Ensure the loader is stopped
onStopLoading();
if (mCursor != null && !mCursor.isClosed()) {
mCursor.close();
}
mCursor = null;
}
}
必要なのは
AsyncTaskLoader
クラスだけが必要です。Android 3.0 以降のもの、または互換性パッケージに付属するもののいずれかが必要です。
また
を書きました。
ListLoader
と互換性のある
LoadManager
を取得するために使用され、一般的な
java.util.List
コレクションを取得するために使用されます。
関連
-
[解決済み] ViewPagerとフラグメント - フラグメントの状態を保存する正しい方法は何ですか?
-
[解決済み] Android ConstraintLayout - あるビューを別のビューの上に配置する
-
[解決済み] アンドロイドアプリのユーザーデータを消去する
-
[解決済み] Android Studio - あいまいなメソッド呼び出し getClass()
-
[解決済み] アンドロイドでシェイクを検出するには?
-
[解決済み] Gradleでビルドタイプを使用し、ContentProviderを使用する同じアプリを1つのデバイスで実行する。
-
[解決済み] 非推奨のandroid.support.v4.app.ActionBarDrawerToggleの置き換え方法
-
[解決済み] ViewPager2でスワイプを無効にするには?
-
[解決済み] Recyclerviewと異なるタイプの行のインフレーションの処理
-
[解決済み] HttpURLConnectionを使ったPOSTによるファイル送信
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] android: imageview の画像を画面に合わせて伸縮させる
-
[解決済み] BottomSheetDialogFragmentの状態をexpandedに設定する。
-
[解決済み] AndroidにおけるViewPager2の適切な実装
-
[解決済み] Android ConstraintLayout - あるビューを別のビューの上に配置する
-
[解決済み] Android Navigation Architecture Component - 現在表示されているフラグメントを取得する
-
[解決済み] wrap_contentでRelativeLayoutがフルスクリーンになってしまう
-
[解決済み] Studio 3.4 をアップデートしたら、引数の leftShift() メソッドが見つかりませんでした。
-
[解決済み] edittextのテキストがメールアドレスかどうかを確認するには?
-
[解決済み] Androidの環境設定。ユーザーが環境設定画面を使用していない場合、デフォルト値を読み込むにはどうすればよいですか?
-
[解決済み] HttpURLConnectionを使ったPOSTによるファイル送信