3

AsyncTaskActivity onPostExecute() メソッドの内部から setadapter() メソッドを呼び出すことに問題があります。AsyncTask に関するドキュメントを読みました: http://developer.android.com/reference/android/os/AsyncTask.html#onPostExecute(Result ) しかし、それを達成する方法が見つかりませんでした。そのためにインテントを使用する必要がありますか? 私はAndroid開発に不慣れなので、ばかげた質問であれば許してください。

主な活動

public class MainActivity extends ListActivity {

private String[] columns = new String[] {"foreign_word", "native_word"};
private int[] target = new int[] { R.id.foreign_word, R.id.native_word };
private Cursor cur = null;

 @Override
 protected void onCreate(Bundle savedInstanceState){
     super.onCreate(savedInstanceState);

     new AsyncTaskActivity(this).execute();
 }

    public void setadapter(Cursor cur)  {
        SimpleCursorAdapter aaa = new SimpleCursorAdapter(this.getApplicationContext(), R.layout.list_entry, cur, columns, target, 0);
        this.setListAdapter(aaa);
    }
}

非同期タスク アクティビティ

public class AsyncTaskActivity extends AsyncTask<Void, Void, Cursor> {

Activity activity = null;
private SQLiteDatabase db = null;
private String[] selection = {"_id", "native_word", "foreign_word"};
Cursor cur = null;


public AsyncTaskActivity(Activity activity) {
    this.activity = activity;
}

@Override
protected Cursor doInBackground(Void... params) {
    DbAdapter mSQLadapter = new DbAdapter(activity);
    db = mSQLadapter.getWritableDatabase();
    Cursor cur = db.query("words", selection, "foreign_word='car'", null, null, null, null);
    return cur;
}

protected void onPostExecute(Cursor cur) {

// I'd like to call setadapter() ,passing it Cursor as a parameter

   }

}
4

2 に答える 2

5

AsyncTask が常に によって呼び出されると仮定してMainActivity、これを行います

protected void onPostExecute(Cursor cur) {
   MainActivity mActivity = (MainActivity) activity;
   mActivity.setadapter();
   }

メソッドにさらにパラメーターを指定して、 、配列などsetAdapterを渡すことができます。CursorString

AsyncTaskただし、が からのみ呼び出される場合のさらに優れた方法MainActivityは、これAsyncTaskを 内のプライベート 内部クラスにすることMainActivityです。これにより、すべてのグローバル変数とメソッドにアクセスできますMainActivity

于 2012-12-31T22:13:51.897 に答える
0

あなたのアプローチは少し変わっていますが、尋ねられた質問に答えるには:

activityListActivity に変更します。

ListActivity activity = null;

そして使用:

protected void onPostExecute(Cursor cur) {
    activity.setListAdapter(new SimpleCursorAdapter(activity, R.layout.list_entry, cur, columns, target, 0));
}

LoaderManager クラスの使用を検討する必要があります。バックグラウンド スレッドを作成して処理します。ContentProvider の使用も検討する必要があります。これは、多くの忙しい作業も処理します。

最後に AsyncTaskActivity は Activity ではないので、このクラス名は少し混乱します...

于 2012-12-31T22:14:39.060 に答える