1

我的应用程序是在gridview上单击图像,并在viewpager中显示它。我的数据库有两个表。 tbl_cafe和tbl_pictures。 tbl_cafe已存储id,title,desc和tbl_picture已存储cafe_id和图片。在viewpager中显示图像具有相同的编号

ImagePagerActivity我查询了tbl_pictures并存储在<ArrayList<HashMap<String, Object>>中。 ImagePagerActivity我使用通用图像加载器库为Viewpager。在ViewpagerActivity中,我查询了图像名称,并将其与url进行连接以下载图像。 在这个时候它显示我的数据库中的所有图像。

我使用不同的表格,导致我坚持在viewpager中显示图像只有相同的ID。

我想要的是,在具有相同ID的Viewpager唯一图像中显示图像后,单击TopActivity的gridview上的图像。

TopActivity

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

enter image description here

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) { 
    } 
} 

} 

回答

0

什么是你甚至想在这里做什么?

 i.putExtra(CafeDbOpenHelper.CAFE_ID, position); 
     i.putExtra(CafeDbOpenHelper.CAFE_TITLE, position); 
     i.putExtra(CafeDbOpenHelper.CAFE_ADDRESS, position); 
     i.putExtra(CafeDbOpenHelper.CAFE_DESCRIPTION, position); 

你在那里做的是把你的信息放在一个数字上。显示列表中项目位置的数字。

你想使用它来获取原始对象,它的数据超出了你的列表。

+0

这是标题,地址,desc和那些在tbl_cafe。我想使用tbl_cafe中的cafe_id来显示tbl_pictures中只有相同ID的图像。请参阅完整的[code](http://pastie.org/7147311)感谢您的回复。 – kongkea 2013-03-28 08:03:29

+0

是的,但你现在所做的只是,如果你按下列表中的第一项,你将所有的数据设置为Integer = 0。 – 2013-03-28 08:39:13

+0

你能暗示一些东西让我弄清楚我的问题吗? – kongkea 2013-03-28 08:45:16

相关问题