1

HomeActivity と CustomListAdapter の 2 つのクラスがあります。HomeActivity クラスはアクティビティを拡張し、リストビューを更新します。バックグラウンドタスクです。そうすると、エラーが発生します。これは、AyncTask クラスの onPostExecute の実装です。

@Override
    protected void onPostExecute(HomeActivity Params){
        progressDialog.dismiss();
        runOnUiThread(new Runnable(){
            public void run(){
                final ListView lv1 = (ListView) findViewById(R.id.listings);
                lv1.setAdapter(new CustomListAdapter(this, shares));
            }
        });

    }

CustomListAdapter のコンストラクターを変更する必要があるというエラーが表示されますが、変更するとすべてがうまくいきません。私もこれを試して失敗しました

final ListView lv1 = (ListView) findViewById(R.id.listings);
        lv1.setAdapter(new CustomListAdapter(this, shares)); 

共有は、Web サービスからのデータの配列リストです。CustomListAdapter クラスのコンストラクターは次のとおりです。

 public CustomListAdapter(Context context, ArrayList listData) {
    this.listData = listData;
    layoutInflater = LayoutInflater.from(context);
}

どのようにそれを行うことができますか?ヘルプは非常に高く評価されます.

4

3 に答える 3

4

変更する必要があります:

 @Override
 protected void onPostExecute(HomeActivity Params){
    progressDialog.dismiss();
    runOnUiThread(new Runnable(){
        public void run(){
            final ListView lv1 = (ListView) findViewById(R.id.listings);
            lv1.setAdapter(new CustomListAdapter(YourActivity.this, shares));
        }
    });

}
于 2013-07-02T10:10:36.103 に答える
1

以下のコードが私のために働くのを見てください

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);

        progressDilaog.dismiss();

        itemListAdapter = new ItemListBaseAdapter(
                        IncidentListActivity.this, Util.arrIncidents);
        gridView.setAdapter(itemListAdapter);
     }

もう1つ、onPostExecuteメソッドでは必要ありません。 リストビューを直接変更できます。runOnUiThread

于 2013-07-02T10:12:59.723 に答える
0

AsyncTask コンテキストを Adapter に送信しています。 Listview をホストする Activity コンテキストを AsyncTask クラスに配置し、その Context を使用して Adapter を構築する必要があります。

編集:これを例として見てください。デフォルトではonPostExecuteはUiスレッドで実行され、runOnUiThreadを定義する必要はありません

public class SyncHandler extends AsyncTask<String, Void, ResponseType>{
private Activity activity;
public SyncHandler (Activity activity)
{
    this.activity = activity;
}

次に、呼び出し元のアクティビティで、アクティビティ コンテキストを Async クラスに渡します。

new SyncHandler(this).execute();
于 2013-07-02T10:04:40.667 に答える