bindView switch-case性能问题

时间:2018-03-14 18:14:03

标签: java android performance switch-statement android-cursoradapter

我正在编写一个需要在ListView中设置图片的应用,具体取决于我的数据库中的条目。

我直接在bindView()的{​​{1}}方法中通过切换案例实现了这一点。由于customCursorAdapter经常被调用,我的bindView开始口吃,一切都变慢。有没有办法“外包”这个数据库比较?这是我的源代码:

ListView

1 个答案:

答案 0 :(得分:0)

我可以从您的代码中看到,与品牌及与之关联的图像存在一对一的映射。我不知道为什么你没有把资源的id放在数据库中,所以你不必在brandList案例中传递switch并且每次必须填充图像时进行比较在每个列表项中。

所以我强烈建议,将图像名称保存在获取其他信息的同一数据库表中。这样您就可以获得与品牌相关联的图像名称,然后将其作为图像资源放入ImageView

所以你需要做类似以下的事情。首先准备一个包含图像资源ID的HashMap

String[] images = {"ferrari", "alpina", "porsche", "volkswagen", .......};
Map<String, Integer> brandImagesMap = new HashMap<String, Integer>();

for(String imageName : images) {
    int drawableResourceId = this.getResources().getIdentifier(imageName, "drawable", this.getPackageName());
    brandImagesMap.put(imageName, drawableResourceId);
}

customCursorAdapter类的构造函数中使用图像的资源ID填充地图后,您可以轻松地从地图中有效地获取图像资源ID,并将其作为{{1的资源}}。请注意,我假设您将图像的名称保存在数据库表的单独列中。

ImageView

代码未经过测试。请根据您的要求进行修改。

<强>更新

使用Glide在String photoResourceName = cursor.getString(cursor.getColumnIndexOrThrow("Photo")); brandPhoto.setImageResource(brandImagesMap.get(photoResourceName)); 中加载图片。它实现起来非常简单,当然也很有效。

RecyclerView功能中,只需使用以下内容替换加载图片的代码即可。

bindView

要了解有关如何使用Glide的更多信息,请关注this link