我的活动中有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
或其他什么的东西?
感谢。
答案 0 :(得分:2)
通常,您要保留您尝试对适配器上的方法执行的操作。然后从Main Activity中调用适配器的方法(在创建适配器实例时保存它)。
完成后不要忘记在适配器方法上调用notifyDataSetChanged / Invalidated。
答案 1 :(得分:0)
在启动AsyncTask之前,使用空arraylist创建一个适配器。在post post中,将结果添加到用于初始化适配器的空arraylist中。在适配器上调用notifyDataSetChanged()。
您可以通过ListView的getAdapter()方法访问适配器,也可以将适配器作为成员变量。