我正在编写一个需要在ListView
中设置图片的应用,具体取决于我的数据库中的条目。
我直接在bindView()
的{{1}}方法中通过切换案例实现了这一点。由于customCursorAdapter
经常被调用,我的bindView
开始口吃,一切都变慢。有没有办法“外包”这个数据库比较?这是我的源代码:
ListView
答案 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。