package com.project.GCB;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.GridView;
import android.widget.ImageView;
public class SelectImage extends Activity{
 
 private Context mContext = null;
 
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.gridgallery);
  
  ArrayList<BgImage> items = new ArrayList<BgImage>();
  mContext = this;
        GridView lvMain = (GridView)findViewById(R.id.gvGallery);
        // 커스텀 ArrayAdapter 선언/초기화. 
        final MyArrayAdapter aa = new MyArrayAdapter(this, R.layout.row, items); 
         // 본 Activity의 아답터로 aa 지정.  
        lvMain.setAdapter(aa);
        
        // 확인 버튼 클릭 이벤트 설정 
        Button btnView = (Button)findViewById(R.id.btnView);
        btnView.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    aa.callImageViewer();
   }
        });
        Button btn = (Button)findViewById(R.id.btn_Right);
  btn.setOnClickListener(new Button.OnClickListener(){
   public void onClick(View v) {
   Intent intent = new Intent(SelectImage.this, SelectImage2.class);
   startActivity(intent);
   }
  });
 }
 
 // ArrayAdapter에서 상속받는 커스텀 ArrayAdapter 정의. 
 private class MyArrayAdapter extends ArrayAdapter<BgImage> {
  
  private ArrayList<String> arrDataList;
  private ArrayList<String> arrIdList;
  private ArrayList<BgImage> items;
       
  // 생성자 
  public MyArrayAdapter(Context context, int textViewResourceId, ArrayList<BgImage> items) {
   super(context, textViewResourceId, items);
   this.items = items;
   mContext = context; 
   arrIdList = new ArrayList<String>();
   arrDataList = new ArrayList<String>();
     
   getArrayInfo(arrIdList,arrDataList);
  }
  
  // Image를 클릭 하였을 떄 Image를 크게 보기 위하여 Image의 정보를 호출
  public final void callImageViewer() {
   Intent i = getIntent();
   ArrayList<String> arrBuf = new ArrayList<String>();
   
   for (int j=0; j<arrDataList.size(); j++){
    
    if (items.get(j).getCheck()) {
     arrBuf.add(arrDataList.get(j));
    }
   }
   
   i.putExtra("image", arrBuf);
   setResult(RESULT_OK, i);
   finish();
  }
  
  // ListView에서 각 행(row)을 화면에 표시하기 전 호출됨. 
        public View getView(final int position, View convertView, ViewGroup parent){ 
   
         // LayoutInflater의 객체 inflater를 현재 context와 연결된 inflater로 초기화. 
   LayoutInflater inflater = ((Activity)mContext).getLayoutInflater(); 
     
   // inflator객체를 이용하여 \res\laout\row.xml 파싱 
   View row = (View)inflater.inflate(R.layout.row, null); 
   
   // 체크박스 설정 변경 이벤트 설정
   CheckBox chk = (CheckBox)row.findViewById(R.id.chkRow);
   chk.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
     // 체크박스 설정 변경시 정보 저장
     items.get(position).setCheck(!items.get(position).getCheck());
    }
   });
         
   ImageView ivGrid;
  
   ivGrid = (ImageView)row.findViewById(R.id.ivRow);
   ivGrid.setScaleType(ImageView.ScaleType.FIT_CENTER);
   
   BitmapFactory.Options bfOpt = new BitmapFactory.Options();
   bfOpt.inSampleSize = 8;
   Bitmap bmpImg = BitmapFactory.decodeFile(arrDataList.get(position), bfOpt);
   Bitmap bmpRs = Bitmap.createScaledBitmap(bmpImg, 50, 50, true);
   ivGrid.setImageBitmap(bmpRs);
   
   // 도전
   //ivGrid.setImageResource(arrDataList.size());
   
   // 커스터마이징 된 View 리턴. 
   return row; 
        }
        
        // 출력 갯수 지정하는 함수를 만들어 버리자~!
        public int getCount(){
         //return mThumbIds.length;
         //return arrDataList.size();
         return 4;
        }
        
        // 저장된 이미지를 불러와 arraylist에 넣기
        private void getArrayInfo(ArrayList<String> arrID, ArrayList<String> arrData) {
         String[] proj = {
       MediaStore.Images.Media._ID,
    MediaStore.Images.Media.DATA,
       MediaStore.Images.Media.DISPLAY_NAME,
       MediaStore.Images.Media.SIZE
         };
   
   Cursor curImage = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, proj, null, null, null);
   
   if (curImage != null && curImage.moveToFirst()) {
    
    String strData;
    if (curImage.getCount() > 0) {
     //int iDataCol = curImage.getColumnIndex(MediaStore.Images.Media.DATA);
    }
    int iDataCol = curImage.getColumnIndex(MediaStore.Images.Media.DATA);
    //iDataCol = iDataCol -4;
    
    do {
     strData = curImage.getString(iDataCol);
     if (strData != null) {
      
      arrData.add(strData);
      BgImage bg = new BgImage(false);
      items.add(bg);
     }
    }while (curImage.moveToNext());
   }
   
   curImage.close();
  }
 }
}
class BgImage {
 private boolean chkImg;
 
 public BgImage (boolean _chkImg){
  this.chkImg = _chkImg;
 }
 public void setCheck(boolean chk) {
  chkImg = chk;
 }
 public boolean getCheck() {
  return chkImg;
 }
}



위와 같이 Sdcard의 이미지를 전부 불러오는 소스인데요
이미지가 총 12개 라고 가정하고 Activity를 3개씩 나누어 한 화면당 4장씩 나오게 했을 떄,
Activity가 넘어갈 시에 1 2 3 4 / 5 6 7 8 / 9 10 11 12 로 나오게 하려면 어떻게 해야 할까요?
보통 arrDataList.size()를 써버려서 전체 이미지만 가져오게 하더라고요.
하지만 그렇게 하면 2번째 Activity부터 5678을 구현하기 힘들더군요

이미지를 지정하는 방식이 아니라 sd카드에서 불어왔을 때 제가 출력하고 싶은 곳 부터 출력 하고 싶습니다...
지정하는 방법은 없을까요? 순서를 바꾸는 방법은 없을까요?