0

ListView参与了我的活动。单击按钮后,将AynscTask调用 an ,完成后将 a 附加BaseAdapterListViewit'sonPostExcecuteMethod以显示结果:

protected void onPostExecute(ArrayList<Result> objResults) {
    ListView lvwResults = (ListView) objContext.findViewById(R.id.results);
    lvwResults.setAdapter(new SearchResultsAdapter(this.objContext, objResults));       
}

适配器在一个非常简化的注释上看起来像这样:

public class SearchResultsAdapter extends BaseAdapter {    
    private static ArrayList<Result> objResults;
    private Search ctxContext = null;

    public SearchResultsAdapter(Search ctxContext, ArrayList<Result> objResults) {
        this.ctxContext = ctxContext;
        SearchResultsAdapter.objResults = objResults;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater mInflater = LayoutInflater.from(ctxContext);
        View vewRow = mInflater.inflate(R.layout.row, null);
        TextView tvwName = (TextView) vewRow.findViewById(R.id.name);
        tvwName.setText(objResults.get(position).getName());
        return vewRow;
    }
}

从我的主要活动(即最初Activity调用. 我怎样才能做到这一点?AsyncTaskSearchResultsAdapter

由于我似乎无权访问适配器实例,如何从我的主 UI 线程访问适配器行?我还读了一些关于打电话notifyDatasetChanged()的东西?

谢谢。

4

2 回答 2

2

通常,您会保留您尝试对适配器上的方法执行的排序。然后从 Main Activity 调用适配器的方法(创建时保存适配器实例)。

完成后不要忘记在适配器方法上调用 notifyDataSetChanged/Invalidated。

于 2012-08-27T19:15:42.750 回答
0

在启动 AsyncTask 之前创建一个带有空数组列表的适配器。在后期执行中,将结果添加到用于初始化适配器的空数组列表中。在适配器上调用 notifyDataSetChanged()。

您可以通过 ListView 的 getAdapter() 方法访问适配器,也可以使适配器成为成员变量。

于 2012-08-27T21:51:03.337 回答