2011-11-11 10 views
1

AsyncTaskを拡張する内部保護クラスを持つアクティビティクラスがあります。私は、ボタンをクリックしてそのデータに基づいてリストを表示すると、バックグラウンドでAsyncTaskロードデータを取得しようとしています。ここsetListAdapterを使用したAndroid非同期クラス

はsetListAdapterのための私のコードです:

setListAdapter(new ArrayAdapter<String>(this, R.layout.list_row, 
       R.id.rowtextview, testArr.toArray(test2))); 

問題は、私はちょうどそれが外部クラスのコンテキストを必要とするためAsyncTaskクラスにsetListAdapterを固執し、それができる唯一の場所ではないということですgoは外側のActivityクラスのonCreate()の内側にあります。 onCreateの内部にある場合、それは一度しか使用できず、動的でもありません。ボタンをクリックして新しいものを検索するたびに、リストを再ロードする方法についてはわかりません。

答えて

2

カスタム内部AsyncTaskは静的な権利としてマークされていませんか?これは実際にあなたがアクティビティである親クラスへの参照を保持していることを意味します。だから使用することができます:

setListAdapter(new ArrayAdapter<String>(YourActivity.this, R.layout.list_row, 
       R.id.rowtextview, testArr.toArray(test2))); 
+0

うわー、ありがとう。私は "YourActivity.class"の代わりに "YourActivity.class"を使用し続けていました。なぜ動作していないのか不思議でした。 – volk

1

簡単に、アダプタをインスタンス変数にして、それを拡張して(些細な)あなたのカスタムupdateData(newData)メソッドを追加します。この方法では、データを更新してnotifyDatasetChanged()に電話してください。そして、あなたは終わった!そうすれば、アダプタを一度設定するだけで、AsyncTaskが返ってくるときにupdateData()に電話するだけです。

+0

いいアイデアですが、動作する最も簡単な解決策は、周囲のクラスを使用しているだけです。 – volk

+0

Heh、私はあなたの 'onList'Adapter()コードが' onCreate() 'の中にあると思っていたので、' this 'が問題ではないと思いました。とにかく、IMOはあなたがそれを更新するたびにアダプタを作り直しています(そのため、 'notifyDatasetChanged()'メソッドがあります)が行く方法ではありませんが、それは "単純な"方法です。 – dmon

+0

ええ私は完全に同意し、notifyDatasetChanged()を調べるつもりです – volk

関連する問題