如何从Activity线程修改Adapter中的行?

时间:2012-08-27 17:31:12

标签: java android android-listview android-adapter

我的活动中有ListView。点击按钮后,系统会调用AynscTask,在完成后会将BaseAdapter附加到其ListView onPostExcecuteMethod以显示结果:

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的{​​{1}},我想对AsyncTask中的结果列表进行一些排序和过滤操作。我怎么能这样做?

如何从主UI线程访问适配器行,因为我似乎无法访问适配器实例?我还读过一些关于调用SearchResultsAdapter或其他什么的东西?

感谢。

2 个答案:

答案 0 :(得分:2)

通常,您要保留您尝试对适配器上的方法执行的操作。然后从Main Activity中调用适配器的方法(在创建适配器实例时保存它)。

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

答案 1 :(得分:0)

在启动AsyncTask之前,使用空arraylist创建一个适配器。在post post中,将结果添加到用于初始化适配器的空arraylist中。在适配器上调用notifyDataSetChanged()。

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