Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android、show activity、下载图像并在imageview上显示(按顺序)_Android_Imageview - Fatal编程技术网

Android、show activity、下载图像并在imageview上显示(按顺序)

Android、show activity、下载图像并在imageview上显示(按顺序),android,imageview,Android,Imageview,我正在尝试解决这个问题,现在我有一个Details页面活动(根据从ListView中选择的项目从DB中以友好方式加载)。每个详细信息页面可以有1到5个图像,这些图像是从在线服务器下载的。我遇到的问题是,在下载图片之前,活动不会显示 基本上,直到onCreate完成,活动才会显示。我正在使用一个线程来下载图像,这样UI就不会冻结,我的问题是,我在哪里可以下载图像视图并将其设置为下载的位图,这样用户在单击列表项后可以立即看到活动和信息,然后在下载后下载并设置图像 我试着把这条线索写在简历上,但我觉得

我正在尝试解决这个问题,现在我有一个Details页面活动(根据从ListView中选择的项目从DB中以友好方式加载)。每个详细信息页面可以有1到5个图像,这些图像是从在线服务器下载的。我遇到的问题是,在下载图片之前,活动不会显示

基本上,直到onCreate完成,活动才会显示。我正在使用一个线程来下载图像,这样UI就不会冻结,我的问题是,我在哪里可以下载图像视图并将其设置为下载的位图,这样用户在单击列表项后可以立即看到活动和信息,然后在下载后下载并设置图像

我试着把这条线索写在简历上,但我觉得也没用。最好的办法是什么

问候,

George

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

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

您可能还希望查看内存中的位图,以防止它们再次被不必要地下载

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


}

公共类DownloadItemDetails扩展了AsyncTask根据您的好奇心,为了让用户满意,我认为您必须使用Github提供的库。此库为您提供异步图像加载、缓存和显示


您也可以从Github使用相同的方法。它还获取远程图像并缓存它们。它特别适合在列表、网格和地图中显示远程图像。

创建AsyncTask类,在onPreExecute()方法中启动进度对话框,在doInBackground()方法中下载所有图像并将其放入ImageView,最后在onPostExecute()显示活动。问题是我需要首先显示活动,然后下载并显示图像,否则用户需要等待4-5秒才能真正显示活动,这会在图像完全下载之前启动活动吗?@George请查看我的更新答案。希望这能澄清一个bitI最终做的有点不同,因为我使用C#with xamarin,我做的是在OnCreate上启动线程,然后在线程上使用runUnuithRead(()=>setImage(thisBusiness.logo));setImage只是以正常的方式设置,效果很好。但因为是你的答案让我走上了正确的道路,所以我把这个标记为答案。