Android Listview异步加载和检查状态

Android Listview异步加载和检查状态,android,listview,android-listview,android-asynctask,Android,Listview,Android Listview,Android Asynctask,我有一个带有复选框的列表视图。我在UI线程上加载所有数据时遇到性能问题,所以现在我使用异步任务加载数据。在异步任务结束时,我使用数据创建适配器,并在列表中调用setAdapter,因此我将适配器创建和适配器设置从onCreate移动到异步任务结束时调用的回调。这样,我就遇到了复选框状态的问题。在最初的版本中,状态是自动管理的,但现在没有了,为什么 编辑:发布适配器 private class AppAdapter extends BaseAdapter { private class

我有一个带有复选框的列表视图。我在UI线程上加载所有数据时遇到性能问题,所以现在我使用异步任务加载数据。在异步任务结束时,我使用数据创建适配器,并在列表中调用setAdapter,因此我将适配器创建和适配器设置从onCreate移动到异步任务结束时调用的回调。这样,我就遇到了复选框状态的问题。在最初的版本中,状态是自动管理的,但现在没有了,为什么

编辑:发布适配器

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创建适配器,并在列表中设置适配器。现在列表还记得选中的状态,但是当由于方向改变而再次创建活动时,它会从头开始。对不起!我的期望很大程度上是错误的。如果单元格没有图像,是否会出现相同的性能问题?