我有一个带复选框的列表视图。我在UI线程上加载所有数据时遇到了性能问题,所以现在我用AsyncTask
加载数据。在AsyncTask
的末尾,我使用我的数据创建了我的适配器,并在列表中调用了setAdapter,因此我将适配器创建和适配器设置从onCreate()
移动到了一个在结束时调用的回调。 AsyncTask
。通过这种方式,我遇到了复选框状态的问题。在原始版本中,状态是自动管理的,但现在不再,为什么?
编辑:已发布的适配器
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;
}
}