重新加载交错网格视图后无法在viewpager中显示正确的图像

时间:2016-01-05 00:53:21

标签: android arrays android-viewpager slide

我正在为Android开发图片库应用程序。图像需要以交错的网格视图显示。一旦我在交错的gridview中点击其中一个图像,我就可以使用viewpager以全屏模式查看图像。图像可以左右滑动。我面临的当前问题是,在交错网格视图中重新加载新图片后,我无法显示新的图像数组。需要您的帮助, 谢谢! 下面是重新加载页面的代码

private void loadMoreData() {

    if ( isLoading )
        return;

    mListFooter.setVisibility(View.VISIBLE);
    isLoading = true;
    flickerGetImagesRequest();
}

重新加载后,将在此处调用flickerGetImagesRequest()方法

{

    String url = "https://api.flickr.com/services/rest";
    Uri.Builder builder = Uri.parse(url).buildUpon();
    builder.appendQueryParameter("api_key", "5e045abd4baba4bbcd866e1864ca9d7b");
    //builder.appendQueryParameter("method", "flickr.interestingness.getList"); //TBS
    builder.appendQueryParameter("method", "flickr.photos.search");
    builder.appendQueryParameter("tags","klcc,husky");
    //builder.appendQueryParameter("sort","relevance");
    builder.appendQueryParameter("format", "json");
    builder.appendQueryParameter("nojsoncallback", "1");
    builder.appendQueryParameter("per_page", "10");
    builder.appendQueryParameter("page", Integer.toString(currPage));

    gsonObjRequest = new GsonRequest<FlickrResponsePhotos>(Request.Method.GET, builder.toString(),
            FlickrResponsePhotos.class, null, new Response.Listener<FlickrResponsePhotos>() {
        @Override
        public void onResponse(FlickrResponsePhotos response) {
            try { 
                if(response != null) {
                    //mStaggeredView.onRefreshComplete();
                    parseFlickrImageResponse(response);
                    currPage++;
                }
            } catch (Exception e) {
                e.printStackTrace();
                showToast("JSON parse error");
            }
            stopProgress();
        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            // Handle your error types accordingly.For Timeout & No connection error, you can show 'retry' button.
            // For AuthFailure, you can re login with user credentials.
            // For ClientError, 400 & 401, Errors happening on client side when sending api request.
            // In this case you can check how client is forming the api and debug accordingly.
            // For ServerError 5xx, you can do retry or handle accordingly.
            if( error instanceof NetworkError) {
            } else if( error instanceof ClientError) { 
            } else if( error instanceof ServerError) {
            } else if( error instanceof AuthFailureError) {
            } else if( error instanceof ParseError) {
            } else if( error instanceof NoConnectionError) {
            } else if( error instanceof TimeoutError) {
            }
            //mStaggeredView.onRefreshComplete();
            stopProgress();
            showToast(error.getMessage());
        }
    });
    gsonObjRequest.setTag(TAG_REQUEST); 
    mVolleyQueue.add(gsonObjRequest);
}

以下是刷新后以交错网格视图显示的图像代码。

private void parseFlickrImageResponse(FlickrResponsePhotos response) {

        FlickrGetImagesResponse photos = response.getPhotos(); //pass array of images to Picture Activity
        String[] photoUrl;

        photoUrl = new String[photos.getPhotos().size()]; //all elements are null
        for (int index = 0; index < photos.getPhotos().size(); index++) {

            FlickrImage flkrImage = photos.getPhotos().get(index);
            photoUrl[index]=flkrImage.getImageUrl();
            StaggeredGridViewItem item = null;
            item = new FlickrGridItem1(this, flkrImage, photoUrl); //pass one image of index
            mStaggeredView.addItem(item);
        }

以下是在onplick

中一次在viewpager中显示图像的代码
public Object instantiateItem(ViewGroup container, int position) {
        View photoRow = inflater.inflate(R.layout.item_image, container,
                false);
        ImageView image = (ImageView) photoRow.findViewById(R.id.img_flickr);
        image.setImageBitmap(imageFromUrl(imageArrayList[position]));

        ((ViewPager) container).addView(photoRow);
        return photoRow;
    }

imageArrayList [position]始终显示数组的最后位置。 假设我想在staggeredgridview中显示数组大小[10]图像。我可以在viewpager中正确滑动到前10张图像。但是,在我重新加载页面后,它只能显示新的10张图像,现在能够在之前的页面中显示图像。

如果问题不够明确,请告诉我。谢谢!!

0 个答案:

没有答案