3

Android SDK の検索ダイアログを理解するのに苦労しています。

私のアプリケーションの「メイン アクティビティ」はボタンを提供します。ユーザーがこのボタンをクリックすると、検索ダイアログが呼び出されます。検索自体は、時間がかかる場合があるため、非同期タスクで実行されます。ここまでは順調ですね。

メイン アクティビティでは、データベースの初期化やクエリの実行などに使用されるデータベース アダプタ オブジェクトも作成されます。しかし、検索可能なアクティビティでこのアダプタ オブジェクトを使用するにはどうすればよいでしょうか。

主な活動
// Init database
DatabaseAdapter dba = new DatabaseAdapter();
dba.init();
// open search dialog
if (buttonClick) onSearchRequest();

検索可能なアクティビティ

  1. インテントを取得し、検索ダイアログからクエリを受け取る -> OK
  2. データベース アダプタを再度使用してクエリを実行するにはどうすればよいですか?

新しいオブジェクトを作成する必要がありますか? 最小アクティビティから検索可能なアクティビティに渡すことはできますか [...]?

ありがとう、
ロバート

4

3 に答える 3

8

Application クラスでアダプターを作成し、すべてのアクティビティで取得できます。それが私が自分のプロジェクトで行っていることです。

public class ApplicationClass extends Application {

    Adapter adapter.

    @Override 
    public void onCreate(){
    adapter=new Adapter();
        super.onCreate();
    }

    public Adapter getAdapter(){
        return adapter;
    }

}

次に、Activity から呼び出します。

Adapter adapter=(ApplicationClass)getApplication().getAdapter();

そんな感じ。ApplicationClass はアプリ名です。MyAppNameApplication の可能性があります。パッケージで作成し、AndroidManifest.xml で宣言する必要があります。

于 2011-05-10T20:49:37.990 に答える
3

オプションは、シングルトンを使用して、静的メソッドを介して DatabaseAdapter へのアクセスを提供することです。元:

private static DatabaseAdapter sWritableAdapter = null;
private static DatabaseAdapter sReadableAdapter = null;

public static DatabaseAdapter openForReading(Context ctx) {
    if(sReadableAdapter == null)
    sReadableAdapter = new DatabaseAdapter(new DatabaseHelper(ctx).getReadableDatabase());

    return sReadableAdapter;

}

または書き込みアクセスの場合:

public static DatabaseAdapter openForWriting(Context ctx) {
if(sWritableAdapter == null)
        sWritableAdapter = new DatabaseAdapter(new DatabaseHelper(ctx).getWritableDatabase());

    return sWritableAdapter;

}

したがって、検索可能なアクティビティでは、たとえば次のように記述します。

DatabaseAdapter adapter = DatabaseAdapter.openForReading(ctx);
adapter.searchSomething();

マルコ

于 2011-05-10T21:05:42.503 に答える
0

むしろ ContentProvider を実装する必要があります

http://developer.android.com/guide/topics/providers/content-providers.html

それらはシングルトンであり、アプリケーションの (ほぼ) どこからでもアクセスできます。

于 2011-05-10T21:38:30.437 に答える