android数组索引异常
我有一个包含imageview和gridview的活动。规则是,当我在gridview上单击所选图像时,它将由imageview预览。然后,可以单击imageview,它将显示在对话框中。问题是,当我单击imageview时,图像与gridview中所选图像不匹配。这是我的代码android数组索引异常,android,arrays,Android,Arrays,我有一个包含imageview和gridview的活动。规则是,当我在gridview上单击所选图像时,它将由imageview预览。然后,可以单击imageview,它将显示在对话框中。问题是,当我单击imageview时,图像与gridview中所选图像不匹配。这是我的代码 public class GalleryActivity extends Activity { ImageView imgviewThumb, imgviewPreviewDialog; public int[] im
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
};
}
}
公共类GalleryActivity扩展活动{
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
};
内部位置;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gallery);
imgviewThumb=(ImageView)findViewById(R.id.imgview\u预览);
imgviewThumb.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
Dialog=新建对话框(GalleryActivity.this);
对话框。可设置可取消(true);
对话框.setContentView(R.layout.dialog\u预览图像);
imgviewPreviewDialog=(ImageView)dialog.findViewById(R.id.imgview\u preview\u dialog);
imgviewPreviewDialog.setImageResource(imageResto[position]);
dialog.show();
}
});
GridView gView=(GridView)findViewById(R.id.grid\u视图);
//实例化ImageAdapter类
gView.setAdapter(新的ImageAdapter(this));
/*单击缩略图时显示完整图像
*创建一个名为FullImage.java的新类
*/
gView.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图、整型位置、,
长id){
imgviewThumb.setImageResource(imageResto[位置]);
}
});
}
公共类ImageAdapter扩展了BaseAdapter{
公共图像适配器(上下文c){
mContext=c;
}
public int getCount(){
返回mThumbIds.length;
}
公共对象getItem(int位置){
返回位置;
}
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
图像视图图像视图;
if(convertView==null){
imageView=新的imageView(mContext);
setLayoutParams(新的GridView.LayoutParams(140140));
imageView.setAdjustViewBounds(false);
imageView.setScaleType(imageView.ScaleType.CENTER\U裁剪);
}否则{
imageView=(imageView)convertView;
}
setImageResource(mThumbIds[position]);
返回图像视图;
}
私有上下文;
//阵列图像
公共整数[]mThumbIds={
R.drawable.thumb1_e,
R.drawable.2,
R.drawable.thumb3,
R.drawable.thumb4,
R.drawable.5,
R.drawable.1,
R.drawable.2,
R.drawable.thumb3,
R.drawable.thumb4
};
}
}
请纠正我的错误。谢谢您的帮助。尝试更改:
public Object getItem(int position) {
return position;
}
为此:
public Object getItem(int position) {
return mThumbIds[position];
}
我认为您使用的是两个不同的数组,因此它可能不匹配
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
};
并放入有效的图像数组
位置在这里得到的值正好是apter中数组长度的0,所以它的写入位置在这里
gView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
imgviewThumb.setImageResource(validImageArray[position]);
}
});
请张贴您的日志,谢谢!既然你有一个数组,为什么不扩展ArrayAdapter而不是BaseAdapter?@Remdroid日志显示有java.lang.ArrayIndexOutOfBoundsException:length=9;index=9。感谢您的建议:-)仍然不起作用。我的意思是,当对话框显示时,它将在网格上预览选定的图像。但感谢您的建议:-)到底是什么问题?它是否引发任何异常?我的意思是,当我运行并生成项目时,该图像未显示在对话框中,没有错误:-(当您单击列表中的项目时,它是否返回有效的数组索引值?我猜问题出在imgviewPreviewDialog.setImageResource(imageResto[positions])。因为setOnItemClick没有问题,所以图像已经与网格上的选定项匹配。我的意思是,当我单击该图像视图时,对话框将显示图像:-)logcat显示存在java.lang.ArrayIndexOutOfBoundsException:length=9;指数=9
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;
}