我自己试图在gridview中加载图像(来自webservice),并且成功完成。我使用 Lazy Adapter 从 Web 服务加载所有图像。
如果我单击某个图像,它应该显示在下一个活动中,并且在滑动该图像时应该显示下一个图像。有任何想法吗???
我自己试图在gridview中加载图像(来自webservice),并且成功完成。我使用 Lazy Adapter 从 Web 服务加载所有图像。
如果我单击某个图像,它应该显示在下一个活动中,并且在滑动该图像时应该显示下一个图像。有任何想法吗???
我想说,使用 ViewPager 可以相对容易地实现这一点。考虑如下流程:当用户选择一个列表项时,将所有图像的列表(例如它们的 URI)和一个指示所选图像的索引传递给包含 ViewPager 的活动。然后,您可以使用传递的列表初始化 ViewPager 的适配器,并将当前项目设置为显示到索引。
查看 API 演示以获取有关如何使用 ViewPager 的更多提示,或阅读 developer.android.com 上的博客文章。与其将 Fragments 作为 View 提供给 ViewPager,不如简单地实例化一个 ImageView - 您可能会发现这个关于 SO 的 Q/A对于一些关于如何做到这一点的指针很有用。此外,可能同样重要的是通读 PagerAdapter 上的文档。
//编辑:一些用于编码以上建议的指针:
让您onItemClick
创建一个新的 Intent,添加用于检索图像的相关数据以及选定的索引,然后启动 Activity:
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(this, ImageViewer.class);
intent.putExtra(PAGE_POSITION, position);
intent.putStringArrayListExtra(IMAGE_LIST, mImages)
// or add a serializable, e.g. an ArrayList<T> with your POJOs
intent.putExtra(IMAGE_LIST, mImages);
startActivity(intent);
}
在包含 ViewPager 的 ImageViewer Activity 中,检索所有附加内容并将 ViewPager 初始化为给定的位置/索引:
if (getIntent() != null && getIntent().getExtras() != null {
mImagePosition = getIntent().getExtras().getInt(PAGE_POSITION, 0);
mImageList = getIntent().getExtras().getStringArrayList(IMAGE_LIST);
// or if you used Serializables
mImageList = (ArrayList<T>) getIntent().getExtras().getSerializable(IMAGE_LIST);
mViewPager.setAdapter(new ImagePagerAdapter());
mViewPager.setCurrentItem(mImageIndex);
}
在 ImagePaderAdapter 中,您实例化包含要显示的图像的 ImageView。那里有很多例子,但在基础上看起来像这样:
private class ImagePagerAdapter extends PagerAdapter {
public int getCount() {
return mImageList == null ? 0 : mImageList.size();
}
public Object instantiateItem(View pager, int position) {
if (mInflater == null) mInflater = (LayoutInflater) container.getContext().getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
View view = mInflater.inflate(R.layout.image_pager_item_layout, null, false);
ImageView photoImageView = (ImageView) view.findViewById(R.id.photo_imageview);
mImageLoader().loadImage(mImageList.get(position), photoImageView);
((ViewPager) pager).addView(view, 0);
return view;
}
public void destroyItem(View pager, int position, Object object) {
((ViewPager) pager).removeView((View) object);
}
public boolean isViewFromObject(View view, Object object) {
return view.equals(object);
}
public void finishUpdate(View container) { }
public void restoreState(Parcelable state, ClassLoader loader) { }
public void startUpdate(View container) { }
public Parcelable saveState() { return null; }
}
请注意,我没有测试上面的代码,也不意味着它是完整的。例如,我假设您知道如何自己获取对 LayoutInflater 的引用,并拥有一个“惰性”图像加载器,它可以针对 ImageView 异步设置图像。该image_pager_item_layout
文件可以只是一个 ImageView,也可以是 ViewGroup 内更复杂的视图层次结构(如 ListView 和 GridView),例如,您可以轻松地为图像添加标题。它非常类似于