私のアプリは、グリッドビューの画像をクリックしてビューページャーに表示します。私のデータベースには 2 つのテーブルがあります。tbl_cafe と tbl_pictures。tbl_cafe には id,title,desc が格納され、tbl_picture には cafe_id と pictures が格納されています。
ImagePagerActivity
tbl_pictures を照会して に保存しました<ArrayList<HashMap<String, Object>>
。ImagePagerActivity には Universal Image Loader ライブラリを使用しましたViewpager
。ViewpagerActivity で、画像名を照会し、画像をダウンロードするための URL と連結しました。この時点で、データベース内のすべての画像が表示されます。
ビューページャーに同じIDのみを表示するのに固執する別のテーブルを使用しています。
私が欲しいのは、ビューTopActivity
ページャーで画像を表示した後、同じIDを持つ画像のみをグリッドビューでクリックすることです。
トップアクティビティ
gridView1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position,
long id) {
Intent i = new Intent(TopActivity.this, ImagePagerActivity.class);
i.putExtra(CafeDbOpenHelper.CAFE_ID, position);
i.putExtra(CafeDbOpenHelper.CAFE_TITLE, position);
i.putExtra(CafeDbOpenHelper.CAFE_ADDRESS, position);
i.putExtra(CafeDbOpenHelper.CAFE_DESCRIPTION, position);
startActivity(i);
}
});
tbl_cafe & tbl_pictures
ImagePagerActivity の完全なImagePagerActivity
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ac_image_pager);
dataSource = new CafeDataSource(this);
dataSource.open();
arrCursor = dataSource.getArrCursor();
arrCursorPicture = dataSource.getArrCursorPicture();
pagerPosition = arrCursorPicture.size();
ImageLoader.getInstance().init(config);
if(savedInstanceState != null){
position = savedInstanceState.getInt(STATE_POSITION);
}
pager = (ViewPager) findViewById(R.id.pager);
arrImageUrl = getArrImageUrl();
pager.setAdapter(new ImagePagerAdapter(arrImageUrl));
pager.setCurrentItem(0);
} // End onCreate
public ArrayList<HashMap<String, Object>> getArrImageUrl(){
arrImageUrl = new ArrayList<HashMap<String, Object>>();
HashMap<String, Object> map;
for (int i = 0; i < pagerPosition; i++) {
map = new HashMap<String, Object>();
url = "http://xxx.xxx/xxx/place_pictures/"+arrCursorPicture.get(i).get(CafeDbOpenHelper.PICTURE_URL);
map.put("image_url", url);
arrImageUrl.add(map);
}
return arrImageUrl;
}
@Override
public void onSaveInstanceState(Bundle outState){
outState.putInt(STATE_POSITION, pager.getCurrentItem());
}
private class ImagePagerAdapter extends PagerAdapter {
private ArrayList<HashMap<String, Object>> myArr = new ArrayList<HashMap<String,Object>>();;
private LayoutInflater inflater;
ImagePagerAdapter(ArrayList<HashMap<String, Object>> myArr) {
this.myArr = myArr;
inflater = getLayoutInflater();
imageLoader = ImageLoader.getInstance();
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((View) object);
}
@Override
public void finishUpdate(View container) {
}
@Override
public int getCount() {
return myArr.size();
}
@Override
public Object instantiateItem(ViewGroup view, int position) {
View imageLayout = inflater.inflate(R.layout.item_pager_image, view, false);
ImageView imageView = (ImageView) imageLayout.findViewById(R.id.imv_pager);
final ProgressBar spinner = (ProgressBar) imageLayout.findViewById(R.id.loading);
imageLoader.displayImage((String) myArr.get(position).get("image_url"), imageView, options, new SimpleImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
spinner.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
String message = null;
switch (failReason.getType()) {
case IO_ERROR:
message = "Input/Output error";
break;
case DECODING_ERROR:
message = "Image can't be decoded";
break;
case NETWORK_DENIED:
message = "Downloads are denied";
break;
case OUT_OF_MEMORY:
message = "Out Of Memory error";
break;
case UNKNOWN:
message = "Unknown error";
break;
}
Toast.makeText(ImagePagerActivity.this, message, Toast.LENGTH_SHORT).show();
spinner.setVisibility(View.GONE);
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
spinner.setVisibility(View.GONE);
}
});
((ViewPager) view).addView(imageLayout, 0);
return imageLayout;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view.equals(object);
}
@Override
public void restoreState(Parcelable state, ClassLoader loader) {
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void startUpdate(View container) {
}
}
}