0

外部データを取得する必要があります。簡単に言うと、オートコンプリート フィールドの文字列配列です。私は自分の でそれをしAsyncTaskましたActivity。すべて正常に動作します。外部サーバーからファイルを取得し、それを文字列配列に入れて、オートコンプリート フィールドにアタッチするだけです。

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
    SearchActivity.this, android.R.layout.select_dialog_item,
    result);
AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.editCity);
textView.setAdapter(adapter);

問題は、特定の場所に行くたびにそれを行うことActivityです。が起動するたびにAsyncTask、アプリの速度が少し遅くなることがあります。そのデータを 1 回だけ取得して、アプリのライフサイクル全体で保持するより良い方法は何ですか?

4

2 に答える 2

2

いつでもデータの静的参照を使用できます。これにより、VM が実行されている限り、データがそこに留まることが保証されます。

クラスを作成して次のように呼び出すことができ、DataStorageそのクラス内に静的 ArrayAdapter オブジェクトを追加します

public class DataStorage{
  public static ArrayAdapter<String> sharedData;
}

そのアダプターをロードするときはいつでも、コードのどこからでも:

if (DataStorage.sharedData == null){
     // write code to set sharedData
}

これは Singleton pattern と呼ばれます。詳細については、Singleton Wikiを参照してください。

于 2013-03-28T13:40:46.857 に答える
1

このデータを一度取得してApplicationから、アプリのクラスに保存できます。次回このチェックをオンにするときは、Activity最初にアプリケーション クラスの配列が空でないかどうかを確認し、AsyncTask.

アプリケーションに Application クラスを追加するには、次のようにします。

1.次のように Application を拡張するクラスを作成します。

public class YourApplicationClass extends Application
{   
    ....
}

2.マニファストで、次のようにアプリケーション クラスとして定義します。

<application
    android:allowBackup="true"
    android:name=".YourApplicationClass"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" >
    ....    

このクラスは、アプリケーション内の他のすべての Activity クラスからアクセスできます。

ドキュメント: http://developer.android.com/reference/android/app/Application.html

于 2013-03-28T13:33:28.050 に答える