앱을 실행하면 그리드뷰로 특정경로에 있는 이미지들을 바둑판 형식으로 띄워줍니다.
사진의 갯수는 가변적이라 언제든지 갯수가 증감할수있습니다.
[앱내에서 삭제한다거나 추가하진 않습니다.]
현재 메인[그리드뷰] 액티비티와 서브[디테일] 액티비티 두개가 있습니다.
메인에서 바둑판 형식의 사진을 선택하면, intent로 서브액티비티로 전환하면서
선택한 사진의 path와 포지션값을 가져갑니다.
서브 액티비티에서 선택한 사진의 path를 이용해서 이미지뷰로 사진을 띄워주는 것까지 했습니다.
여기서, 뷰페이저를 이용해서 좌/우로 손으로 슬라이드 했을 때 이전/다음이미지를 보여주려고하는데요,
프로젝트 우클릭->설정/자바빌드패스에서 android-support-v4.jar를 추가해줬습니다.
viewpager를 사용하려면 이게 필요하다고 하더군요.
그리고 기존의 sub.xml에 아래와 같이 viewpager를 추가했습니다.(이미지뷰는 그 이전에 있던거)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
</android.support.v4.view.ViewPager>
<ImageView
android:id="@+id/image01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</RelativeLayout>
그리고 아래는 서브[디테일] 액티비티의 소스입니다.
//onCreate 부분
mPager = (ViewPager)findViewById(R.id.pager);
mPager.setAdapter(new PagerAdapterClass(getApplicationContext()));
private class PagerAdapterClass extends PagerAdapter
{
private LayoutInflater li;
public PagerAdapterClass(Context c)
{
super();
li = LayoutInflater.from(c);
}
@Override
public int getCount() //뷰페이저 총 갯수
{
return paths.length;//이미지 총 갯수
}
@Override
public Object instantiateItem(View container, int position)
{
View v = null;
if(position==0)
{
Log.d("position is 0","첫번째사진");
v = li.inflate(R.layout.gallarydetailactivity, null);
}
((ViewPager)container).addView(v, 0); //여기서 에러발생
return v;
}
@Override
public void destroyItem(View container,int position,Object object) {
// TODO Auto-generated method stub
super.destroyItem(container, position, object);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return false;
}
}
이런식으로 예제를 보면서 만들었습니다.
기존의 예제들은 미리 getCount (보여질 뷰페이저갯수)가 정해져있는데, 저같은 경우엔 위에서 말씀드린대로
길이가 가변적이라서.. 현재 특정경로안에 있는 이미지 갯수들을 변수에 넣어서 사용했습니다.
사진 갯수만큼 값들도 잘 받아왔구요.
문제가 instantiateitem 이부분인거같습니다..
그리드뷰에서 첫번째 사진을 가져온다면 포지션이 0인데,
뷰페이저로 띄울 때 포지션이 0이면 이미지도 bm = BitmapFactory.decodeFile(paths[position]) ;
이런식으로 각 포지션에 맞는 이미지를 띄워주려고 하는데요...
((ViewPager)container).addView(v, 0); 에서 아래와같은 에러가 발생합니다.

널포인터익셉션인거 보니 제가 빠뜨린부분이 있다거나, 실수한 부분이 있다는게 확실한데....
addview가 listview에서 리스트변수.add(item); 이런 개념이라 하더라구요... 도대체 무엇이 문제인지 모르겠습니다 ㅠ
+
지금확인해보니, 위의 소스 상태에서 getcount의 값을 1로 하나만 지정했더니 오류없이 나오긴 하네요..
그대신 뷰페이저 기능은 되지 않습니다..