我正在为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张图像,现在能够在之前的页面中显示图像。
如果问题不够明确,请告诉我。谢谢!!