首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新SimpleCursorTreeAdapter的子级

更新SimpleCursorTreeAdapter的子级
EN

Stack Overflow用户
提问于 2014-04-09 09:34:30
回答 1查看 233关注 0票数 0

我正在使用SimpleCursorTreeAdapter来显示数据库中的数据。我正在使用加载器来管理所有游标。一切都很好。但是在每个孩子的视图中都有一些图像。这会在滚动时引起明显的口吃。因此,我想使用异步任务来解码背景中的图像。类似于(伪码):

代码语言:javascript
复制
@Override                                                                                                        
protected void bindChildView(View view, Context context, Cursor cursor, boolean isLastChild) {                   
        super.bindChildView(view, context, cursor, isLastChild);                                                 
        String imgFile = cursor.getString(MyDatabaseHelper.FILE_INDEX);                                          
        new asyncLoadImage().execute(imgFile);                                                                   
}                                                                                                                

private class asyncLoadImage extends AsyncTask<String, Void, Bitmap> {                                           

        @Override                                                                                                
        protected Bitmap doInBackground(String... arg0) {                                                        
                String imgFile = arg0[0];                                                                        
                return Utils.getBitMap(imgFile);//psuedocode                                                     
        }                                                                                                        

        @Override                                                                                                
        protected void onPostExecute(Bitmap bm) {                                                                
                ImageView imageView = new ImageView(mCtx);                                                       
                imageView.setTag(mID);                                                                           
                imageView.setImageBitmap(bm);                                                                    
                //ok got the imageview. where do I append it ??                                                  
        }                                                                                                        
}      

当图像视图在onPostExecute()函数中准备就绪时,bindChildView中提供的视图可能已经被回收,并指向了一些不同的子元素。如何确定在何处追加图像视图?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-11 11:51:37

首先,不要附加。无论如何,你需要ImageView。让ImageView使用占位符图像,当最终图像准备就绪时,将其替换为最终图像。

第二,考虑使用一个了解Adapter回收的现有库,例如毕加索。诚然,我不知道毕加索是否支持ExpandableListAdapter,因为我很少使用ExpandableListView

如果确定没有合适的库,则需要getChildView()和/或getGroupView()方法中的一些逻辑来处理回收和背景工作。一种非常简单的方法是将ImageView所需的图像的URL通过setTag()放到ImageView的标记中。然后,您的onPostExecute()可以将它刚刚下载的URL与来自ImageView标记的URL进行比较,如果它们不匹配,则不要更新ImageView。这意味着您将不必要地下载一些图像,因此更复杂的方法将安排取消正在下载图像的AsyncTask。我相信还有其他办法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22958402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档