0

这是我第一次使用列表视图,所以请提前原谅我的任何初学者错误。

我的自定义 getView 代码如下:

public View getView(int position, View convertView, ViewGroup parent) {
    final ViewHolder mHolder;
    if (convertView == null) {
        /*Toast toast = Toast.makeText(context, "nullConvertView", Toast.LENGTH_SHORT);
        toast.show();*/
        mHolder = new ViewHolder();
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.listitem, parent, false);


        mHolder.PetName = (TextView) convertView.findViewById(R.id.PetName);

        mHolder.PetImage = (RoundedImageView) convertView.findViewById(R.id.PetImage);



        updateItem(mHolder, this.getItem(position));

        convertView.setTag(mHolder);
    } else {
        mHolder = (ViewHolder) convertView.getTag();
    }

    return convertView;
}

函数 updateItem 连接到一个 dropbox 数据存储并检索数据存储标题和图像等信息(listview 中的每一行都是一个 dropbox 数据存储),然后通过 mHolder.PetName.setText(queriedresultstring) ecc 设置它们

如果我以这种方式保留代码,我在滚动时会得到重复的视图,而如果我将 updateItem 函数移到 if/else 条件之外,一切正常,但每次我滚动列表视图时,它都会再次查询数据库中重新出现在屏幕上的每一行.

有什么方法可以将信息保存在视图上,而不必每次视图返回屏幕时都查询数据库?

谢谢

4

1 回答 1

0

与其在您的方法中查询数据库,不如updateItem()使用 aLoader来查询数据并构建一个本地数据存储,用于支持您的适配器(例如ArrayList.)。或者,您可以使用 aLoader查询后端并将数据缓存在 a本地数据库,因此您Loader必须具有使用本地数据库的逻辑,而不是提交新查询(如果可能)。由您决定如何管理它。

顺便说一句,您需要让当前updateItem()的条件检查之外的原因if/else是因为否则回收的视图不会使用正确的数据绑定进行更新。

于 2015-01-21T13:48:13.443 回答