2012-09-11 61 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 –