2012-09-11 60 views
0

我有一个活动,包括imageview的和gridview.the规则当我点击选择上gridview的图像,将通过imageview.then预览,所述ImageView的可点击和它将在对话框中显示。问题是当我单击imageview时,图像与gridview.here中的选定图像不匹配我的代码。机器人数组索引例外

public class GalleryActivity extends Activity { 

ImageView imgviewThumb, imgviewPreviewDialog; 
public int[] imageResto = { 
     R.drawable.img1, 
     R.drawable.img2, 
     R.drawable.img3, 
     R.drawable.img4, 
     R.drawable.img5, 
     R.drawable.img1, 
     R.drawable.img2, 
     R.drawable.img3, 
     R.drawable.img4 
}; 
int position ; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_gallery); 

    imgviewThumb = (ImageView)findViewById(R.id.imgview_preview); 
    imgviewThumb.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Dialog dialog = new Dialog(GalleryActivity.this); 
      dialog.setCancelable(true); 
      dialog.setContentView(R.layout.dialog_previewimage); 
      imgviewPreviewDialog = (ImageView) dialog.findViewById(R.id.imgview_preview_dialog); 
      imgviewPreviewDialog.setImageResource(imageResto[position]); 
      dialog.show(); 
     } 
    }); 

    GridView gView = (GridView) findViewById(R.id.grid_View); 

    //Instantiating ImageAdapter class 
    gView.setAdapter(new ImageAdapter(this)); 

    /*showing full image on clicking the thumbnail 
    * create a new class named FullImage.java 
    */ 
    gView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, 
       long id) { 
      imgviewThumb.setImageResource(imageResto[position]); 
     } 
    }); 
} 

public class ImageAdapter extends BaseAdapter { 
    public ImageAdapter(Context c) { 
     mContext = c; 
    } 

    public int getCount() { 
     return mThumbIds.length; 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 
     if (convertView == null) { 
      imageView = new ImageView(mContext); 
      imageView.setLayoutParams(new GridView.LayoutParams(140, 140)); 
      imageView.setAdjustViewBounds(false); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     } else { 
      imageView = (ImageView) convertView; 
     } 

     imageView.setImageResource(mThumbIds[position]); 

     return imageView; 
    } 

    private Context mContext; 

    // images in array 
    public Integer[] mThumbIds = { 
      R.drawable.thumb1_e, 
      R.drawable.thumb2, 
      R.drawable.thumb3, 
      R.drawable.thumb4, 
      R.drawable.thumb5, 
      R.drawable.thumb1, 
      R.drawable.thumb2, 
      R.drawable.thumb3, 
      R.drawable.thumb4 
    }; 
} 
} 

请纠正me.thanks提前。

+0

请发表您的logcat的感谢! – 2012-09-11 07:56:10

+1

既然你有一个数组,为什么不扩展ArrayAdapter而不是BaseAdapter? –

+0

@Remdroid logcat显示有java.lang.ArrayIndexOutOfBoundsException:length = 9;指数= 9.thanks的建议:-) –

回答

1

尝试改变:

public Object getItem(int position) { 
     return position; 
} 

要这样:

public Object getItem(int position) { 
     return mThumbIds[position]; 
} 
+0

仍不working.i的意思,当对话框显示,将预览grid.but由于对所选图像您的建议:-) –

+0

究竟是什么问题呢?它会抛出任何异常吗? – waqaslam

+0

我指的是图像不显示对话框,当我运行;当您从列表中单击一个项目建立项目没有错误:-( –

0

我想你使用两种不同的阵列,它可能不匹配,

public int[] imageResto = { 
     R.drawable.img1, 
     R.drawable.img2, 
     R.drawable.img3, 
     R.drawable.img4, 
     R.drawable.img5, 
     R.drawable.img1, 
     R.drawable.img2, 
     R.drawable.img3, 
     R.drawable.img4 
}; 

    // images in array 
    public Integer[] mThumbIds = { 
      R.drawable.thumb1_e, 
      R.drawable.thumb2, 
      R.drawable.thumb3, 
      R.drawable.thumb4, 
      R.drawable.thumb5, 
      R.drawable.thumb1, 
      R.drawable.thumb2, 
      R.drawable.thumb3, 
      R.drawable.thumb4 
    }; 

并提出有效的图像阵列 位置在这里得到的是对数组的长度为0的所以它的写位置到达这里

gView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, 
       long id) { 

      imgviewThumb.setImageResource(validImageArray[position]); 
     } 
    }); 

,或者你可以做这样的改变getView

public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 
     if (convertView == null) { 
      imageView = new ImageView(mContext); 
      imageView.setLayoutParams(new GridView.LayoutParams(140, 140)); 
      imageView.setAdjustViewBounds(false); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     } else { 
      imageView = (ImageView) convertView; 
     } 

     imageView.setImageResource(imageResto[position]); 

     return imageView; 
    } 
+0

我想这个问题是imgviewPreviewDialog。 setImageResource(imageResto [位置])。因为在setOnItemClick没有问题,图像已经与grid.i选中的项目相匹配的意思是,当我点击的ImageView,对话框将显示:-) –

+0

的logcat中显示有图像java.lang.ArrayIndexOutOfBoundsException:length = 9;指数= 9 –