Android Listview异步加载和检查状态
我有一个带有复选框的列表视图。我在UI线程上加载所有数据时遇到性能问题,所以现在我使用异步任务加载数据。在异步任务结束时,我使用数据创建适配器,并在列表中调用setAdapter,因此我将适配器创建和适配器设置从onCreate移动到异步任务结束时调用的回调。这样,我就遇到了复选框状态的问题。在最初的版本中,状态是自动管理的,但现在没有了,为什么 编辑:发布适配器Android Listview异步加载和检查状态,android,listview,android-listview,android-asynctask,Android,Listview,Android Listview,Android Asynctask,我有一个带有复选框的列表视图。我在UI线程上加载所有数据时遇到性能问题,所以现在我使用异步任务加载数据。在异步任务结束时,我使用数据创建适配器,并在列表中调用setAdapter,因此我将适配器创建和适配器设置从onCreate移动到异步任务结束时调用的回调。这样,我就遇到了复选框状态的问题。在最初的版本中,状态是自动管理的,但现在没有了,为什么 编辑:发布适配器 private class AppAdapter extends BaseAdapter { private class
private class AppAdapter extends BaseAdapter {
private class ViewHolder {
TextView tv;
ImageView iv;
}
private ArrayList<Map<String, Object>> itemList;
private String imageFrom;
private String textFrom;
private PackageManager pm;
private Context c;
int resLayout;
int resImage;
int resText;
public AppAdapter(Context context, ArrayList<Map<String, Object>> data,
int resource, String image, String text, int resImg, int resTxt) {
resLayout = resource;
resImage = resImg;
resText = resTxt;
c = context;
if (data != null)
itemList = data;
else
itemList = new ArrayList<Map<String, Object>>();
imageFrom = image;
textFrom = text;
pm = context.getPackageManager();
}
public void loadData(ArrayList<Map<String, Object>> data) {
itemList.addAll(data);
this.notifyDataSetChanged();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = null;
ViewHolder vh = null;
if (convertView == null) {
vh = new ViewHolder();
LayoutInflater inflater = (LayoutInflater) c
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(resLayout, parent, false);
vh.iv = (ImageView) v.findViewById(resImage);
vh.tv = (TextView) v.findViewById(resText);
v.setTag(vh);
} else {
vh = (ViewHolder) convertView.getTag();
v = convertView;
}
if (!itemList.isEmpty()) {
ApplicationInfo r = (ApplicationInfo) itemList.get(position)
.get(imageFrom);
vh.iv.setImageDrawable(r.loadIcon(pm));
vh.tv.setText((String) itemList.get(position).get(textFrom));
}
return v;
}
@Override
public int getCount() {
return itemList.size();
}
@Override
public Object getItem(int position) {
return itemList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
}
我建议您使用游标装入器。但我认为问题在于ListView单元的重用和准备。显示您的伪代码?我现在更改了适配器,并在回调中调用loadData,在onCreate中使用null创建适配器,并在列表中设置适配器。现在列表还记得选中的状态,但是当由于方向改变而再次创建活动时,它会从头开始。对不起!我的期望很大程度上是错误的。如果单元格没有图像,是否会出现相同的性能问题?