1

我有两个类,HomeActivity 和 CustomListAdapter。HomeActivity 类扩展了一个活动,然后更新了一个列表视图。我正在使用扩展 BaseAsapter 的 CustomListAdapter 类将数据填充到列表视图中。一切正常,但我想将数据加载到后台任务。当我这样做时,会出现错误。这是我对 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)); 

share 是来自 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);
     }

还有一件事,您不需要 runOnUiThreadonPostExecute方法。您可以直接更改您的列表视图。

于 2013-07-02T10:12:59.723 回答
0

您正在将 AsyncTask 上下文发送到您的 Adapter ,您应该将托管 Listview 的 Activity 上下文放到您的 AsyncTask 类中,然后使用该上下文来构造您的适配器。

编辑:以此为例,默认情况下 onPostExecute 在 Ui 线程上运行,不需要定义 runOnUiThread

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

然后在您调用的 Activity 中将 Activity 上下文传递给您的 Async 类:

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