2013-07-07 41 views
0

我试图解决这个问题,现在我有一个详细的活动页面(这从从选择取决于项目的DB dinamically加载一个ListView)。每个详细信息页面可以有1到5个图像,这些图像是从在线服务器下载的。我遇到的问题是,直到下载图片才显示活动。的Android,展示活动,下载图像,并显示在ImageView的(按顺序)

基本上活动将不会显示,直到结束的onCreate。我使用一个线程下载图像,从而使UI犯规冻结,我的问题是,我在哪里可以下载和ImageView的设置为downlaoded位图,以便用户将点击列表项目后看到活动信息马上和然后在下载后下载并设置图像?

我试图把线程上的onResume,但我认为它没有帮助的。什么是最好的方法?

问候,

乔治

+0

创建AsyncTask类,在onPreExecute()方法中启动一个进度对话框,在doInBackground()方法中下载所有图像并将其放入图像视图,最后放入onPostExecute()显示活动。 –

+0

问题是我需要先显示活动,然后下载并显示图像,否则用户必须在活动实际显示前等待4-5秒,这是否会在图像完全下载之前启动活动? – George

+0

@George请看我最新的答案。希望澄清一下 –

回答

1

你需要实现一个AsyncTask。它在后台线程上执行,并防止阻塞主线程。您只需创建一个扩展AsyncTask的类,如下所示

编辑 - 是的,这会在图像下载之前显示您的活动。您只需在onCreate()中调用AsyncTask的execute()方法查看上面的AsyncTasks的页面以获得完整的概述。如果您的AsyncTask尚未完成,实施起来非常简单,只需要了解配置更改。

你也可能想看看你的caching位图在内存中,以防止它们被不必要地再次下载。

public class DownloadItemDetails extends AsyncTask<String, Void, ArrayList<Bitmap>{ 

protected ArrayList<Bitmap> doInBackground(String...params){ 

//Download each Bitmap here, and add them to a list to be displayed later 


} 

protected void onPostExecute(ArrayList<Bitmap> results){ 

    //This method executes on the main thread, so after your downloads finish 
    //You can set your imageviews in your Details Page here 


} 

}

+0

谢谢!!会尽快完成并回来! ()=> setImage(thisBusiness.logo) – George

+0

我做了一些改变,因为我在C#中使用了xamarin,我所做的就是在OnCreate上启动线程,然后在线程上使用\t RunOnUiThread ); 和setImage只是以正常的方式设置它,效果很好。但是,既然这是你的回答,那么我就把它作为答案。 – George

0

根据你的好奇心,让用户开心,我想你必须使用Android Universal Image Loader库从GitHub。该库为您提供异步图像加载,缓存和显示。

您还可以使用从GitHub ShutterBug - Remote Image Loader的相同。它还获取远程图像并缓存它们。它特别适合以列表,网格和地图显示远程图像。

相关问题