栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

延迟将图像下载到gridView

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

延迟将图像下载到gridView

这就是我在活动中获取多张照片的方式。您可以使用它的一部分来适应您的逻辑。我用它来从相册中获取Facebook图片。因此,我的需求(我假设)与您的需求不同。但同样,该逻辑可能对您有用。

注意: 这将很长。;-)

这些是通过ACtivity使用的全局声明:

// HOLD THE URL TO MAKE THE API CALL TOprivate String URL;// STORE THE PAGING URLprivate String pagingURL;// FLAG FOR CURRENT PAGEint current_page = 1;// BOOLEAN TO CHECK IF NEW FEEDS ARE LOADINGBoolean loadingMore = true;Boolean stopLoadingData = false;

这是获取初始图像集的代码块:

private class getPhotosData extends AsyncTask<Void, Void, Void> {    @Override    protected Void doInBackground(Void... arg0) {        // CHANGE THE LOADING MORE STATUS TO PREVENT DUPLICATE CALLS FOR        // MORE DATA WHILE LOADING A BATCH        loadingMore = true;        // SET THE INITIAL URL TO GET THE FIRST LOT OF ALBUMS        URL = "https://graph.facebook.com/" + initialAlbumID     + "/photos&access_token="     + Utility.mFacebook.getAccessToken() + "?limit=10";        try { HttpClient hc = new DefaultHttpClient(); HttpGet get = new HttpGet(URL); HttpResponse rp = hc.execute(get); if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {     String queryAlbums = EntityUtils.toString(rp.getEntity());     JSonObject JOTemp = new JSonObject(queryAlbums);     JSonArray JAPhotos = JOTemp.getJSonArray("data");     // IN MY CODE, I GET THE NEXT PAGE link HERE     getPhotos photos;     for (int i = 0; i < JAPhotos.length(); i++) {         JSonObject JOPhotos = JAPhotos.getJSonObject(i);         // Log.e("INDIVIDUAL ALBUMS", JOPhotos.toString());         if (JOPhotos.has("link")) {  photos = new getPhotos();  // GET THE ALBUM ID  if (JOPhotos.has("id")) {      photos.setPhotoID(JOPhotos.getString("id"));  } else {      photos.setPhotoID(null);  }  // GET THE ALBUM NAME  if (JOPhotos.has("name")) {      photos.setPhotoname(JOPhotos.getString("name"));  } else {      photos.setPhotoname(null);  }  // GET THE ALBUM COVER PHOTO  if (JOPhotos.has("picture")) {      photos.setPhotoPicture(JOPhotos   .getString("picture"));  } else {      photos.setPhotoPicture(null);  }  // GET THE PHOTO'S SOURCE  if (JOPhotos.has("source")) {      photos.setPhotoSource(JOPhotos   .getString("source"));  } else {      photos.setPhotoSource(null);  }  arrPhotos.add(photos);         }     } }        } catch (Exception e) { e.printStackTrace();        }        return null;    }    @Override    protected void onPostExecute(Void result) {        // SET THE ADAPTER TO THE GRIDVIEW        gridOfPhotos.setAdapter(adapter);        // CHANGE THE LOADING MORE STATUS        loadingMore = false;    }}

这是为了检测用户何时滚动到末尾并获取新的图像集:

// ONSCROLLLISTENERgridOfPhotos.setonScrollListener(new onScrollListener() {    @Override    public void onScrollStateChanged(AbsListView view, int scrollState) {    }    @Override    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {        int lastInScreen = firstVisibleItem + visibleItemCount;        if ((lastInScreen == totalItemCount) && !(loadingMore)) { if (stopLoadingData == false) {     // FETCH THE NEXT BATCH OF FEEDS     new loadMorePhotos().execute(); }        }    }});

最后,这就是我获取下一组图像的方式:

private class loadMorePhotos extends AsyncTask<Void, Void, Void> {    @Override    protected Void doInBackground(Void... arg0) {        // SET LOADING MORE "TRUE"        loadingMore = true;        // INCREMENT CURRENT PAGE        current_page += 1;        // Next page request        URL = pagingURL;        try { HttpClient hc = new DefaultHttpClient(); HttpGet get = new HttpGet(URL); HttpResponse rp = hc.execute(get); if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {     String queryAlbums = EntityUtils.toString(rp.getEntity());     // Log.e("PAGED RESULT", queryAlbums);     JSonObject JOTemp = new JSonObject(queryAlbums);     JSonArray JAPhotos = JOTemp.getJSonArray("data");     // IN MY CODE, I GET THE NEXT PAGE link HERE     getPhotos photos;     for (int i = 0; i < JAPhotos.length(); i++) {         JSonObject JOPhotos = JAPhotos.getJSonObject(i);         // Log.e("INDIVIDUAL ALBUMS", JOPhotos.toString());         if (JOPhotos.has("link")) {  photos = new getPhotos();  // GET THE ALBUM ID  if (JOPhotos.has("id")) {      photos.setPhotoID(JOPhotos.getString("id"));  } else {      photos.setPhotoID(null);  }  // GET THE ALBUM NAME  if (JOPhotos.has("name")) {      photos.setPhotoname(JOPhotos.getString("name"));  } else {      photos.setPhotoname(null);  }  // GET THE ALBUM COVER PHOTO  if (JOPhotos.has("picture")) {      photos.setPhotoPicture(JOPhotos   .getString("picture"));  } else {      photos.setPhotoPicture(null);  }  // GET THE ALBUM'S PHOTO COUNT  if (JOPhotos.has("source")) {      photos.setPhotoSource(JOPhotos   .getString("source"));  } else {      photos.setPhotoSource(null);  }  arrPhotos.add(photos);         }     } }        } catch (Exception e) { e.printStackTrace();        }        return null;    }    @Override    protected void onPostExecute(Void result) {        // get listview current position - used to maintain scroll position        int currentPosition = gridOfPhotos.getFirstVisiblePosition();        // APPEND NEW DATA TO THE ARRAYLIST AND SET THE ADAPTER TO THE        // LISTVIEW        adapter = new PhotosAdapter(Photos.this, arrPhotos);        gridOfPhotos.setAdapter(adapter);        // Setting new scroll position        gridOfPhotos.setSelection(currentPosition + 1);        // SET LOADINGMORE "FALSE" AFTER ADDING NEW FEEDS TO THE EXISTING        // LIST        loadingMore = false;    }}

这是上述查询的帮助程序类

SET
GET
从查询中收集的数据:

public class getPhotos {    String PhotoID;    String PhotoName;    String PhotoPicture;    String PhotoSource;    // SET THE PHOTO ID    public void setPhotoID(String PhotoID)  {        this.PhotoID = PhotoID;    }    // GET THE PHOTO ID    public String getPhotoID()  {        return PhotoID;    }    // SET THE PHOTO NAME    public void setPhotoname(String PhotoName)  {        this.Photoname = PhotoName;    }    // GET THE PHOTO NAME    public String getPhotoname()    {        return PhotoName;    }    // SET THE PHOTO PICTURE    public void setPhotoPicture(String PhotoPicture)    {        this.PhotoPicture = PhotoPicture;    }    // GET THE PHOTO PICTURE    public String getPhotoPicture() {        return PhotoPicture;    }    // SET THE PHOTO SOURCE    public void setPhotoSource(String PhotoSource)  {        this.PhotoSource = PhotoSource;    }    // GET THE PHOTO SOURCE    public String getPhotoSource()  {        return PhotoSource;    }}

如果您还需要

adapter
代码,请告诉我。我在适配器中使用Fedor的延迟加载方法。

ew 希望这对您有所帮助。如果您还有其他问题,请随时提问。:-)

编辑:添加的适配器代码:

public class PhotosAdapter extends baseAdapter {    private Activity activity;    ArrayList<getPhotos> arrayPhotos;    private static LayoutInflater inflater = null;    ImageLoader imageLoader;    public PhotosAdapter(Activity a, ArrayList<getPhotos> arrPhotos) {        activity = a;        arrayPhotos = arrPhotos;        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);        imageLoader = new ImageLoader(activity.getApplicationContext());    }    public int getCount() {        return arrayPhotos.size();    }    public Object getItem(int position) {        return arrayPhotos.get(position);    }    public long getItemId(int position) {        return position;    }    public View getView(final int position, View convertView, ViewGroup parent) {        ViewHolder holder;        View vi = convertView;        if(convertView == null) { vi = inflater.inflate(R.layout.photos_item, null); holder = new ViewHolder(); holder.imgPhoto = (ImageView)vi.findViewById(R.id.grid_item_image); vi.setTag(holder);          } else { holder = (ViewHolder) vi.getTag();        }        if (arrayPhotos.get(position).getPhotoPicture() != null){ imageLoader.DisplayImage(arrayPhotos.get(position).getPhotoPicture(), holder.imgPhoto);        }        return vi;    }    static class ViewHolder {        ImageView imgPhoto;    }}

编辑:添加了显示加载时进度的步骤:

向您的XML添加一个ProgressBar,在其下方有GridView。如果重量有任何问题,请多加一些。

<LinearLayout    android:id="@+id/linlaProgressBar"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:gravity="center"    android:orientation="horizontal" >    <ProgressBar                android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:padding="2dp" /></LinearLayout>

在您的Java中,将声明

LinearlayoutlinlaProgressBar
为Global并将
onCreate()
其强制转换为,并将其可见性设置为
linlaProgressBar.setVisibility(View.GONE);

并在

onPreExecute()
使用中像这样:

@Overrideprotected void onPreExecute() {    // SHOW THE BOTTOM PROGRESS BAR (SPINNER) WHILE LOADING MORE PHOTOS    linlaProgressBar.setVisibility(View.VISIBLE);}

最后在

onPostExecute()

// HIDE THE BOTTOM PROGRESS BAR (SPINNER) AFTER LOADING MORE ALBUMSlinlaProgressBar.setVisibility(View.GONE);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/383048.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号