인터넷에 페이저뷰 예제는 많은데 무한 스크롤 되는 예제는 없더군요..
그래서 갤러리 이미지뷰 무한 스크롤 예제를 보고 응용해서 만들어 봤습니다.
작동은 잘 되는데 아직 초짜 프로그래머랑 확실히 알고 한건 아니라 더 좋은 방법이 있을수도..ㅎ
그래도 최대한 이해하기 쉽게 주석 달아놨으니 일단 주욱 보시고 적용시켜 보세요~
http://blog.daum.net/mailss/19 블로그 참조..
import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.Toast; //support package에 있는 FragmentActivity를 상속 받는다. public class FragmentPagerAdapterSampeActivity extends FragmentActivity { private final static int COUNT=4; // 표시할 페이지 수 private ViewPager mPager; //뷰 페이저 private static OnClickListener mButtonClick = new OnClickListener() { //클릭 이벤트 객체 public void onClick(View v) { String text = ((Button)v).getText().toString(); //버튼에만 이벤트를 등록. 버튼 글자 가져옴. Toast.makeText(v.getContext(), text, Toast.LENGTH_SHORT).show(); //토스트로 출력 } }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.viewpager); mPager = (ViewPager)findViewById(R.id.pager); mPager.setAdapter(new BkFragmentAdapter(getSupportFragmentManager())); //무한 스크롤 구현 부분 mPager.setOnPageChangeListener(new OnPageChangeListener() { public void onPageSelected(int position) { // TODO Auto-generated method stub if(position < COUNT) { mPager.setCurrentItem(position + COUNT, false); // 두번째 false 인자값은 //위치이동 에니메이션을 꺼준다 } else if (position >= COUNT*2) { // true 로 바꿔서 실행해보면 어떤얘긴지 //단박에 알수 있다. mPager.setCurrentItem(position - COUNT, false); } } public void onPageScrolled(int position, float positionOffest, int positionOffestPixel) { } public void onPageScrollStateChanged(int state) { } }); } //FragmentPager 구현 private class BkFragmentAdapter extends FragmentPagerAdapter{ //생성자 public BkFragmentAdapter(FragmentManager fm) {super(fm);} /** * 실제 뷰페이저에서 보여질 fragment를 반환. * 일반 아답터(갤러리, 리스트뷰 등)의 getView와 같은 역할 * @param position - 뷰페이저에서 보여저야할 페이지 값( 0부터 ) * @return 보여질 fragment */ @Override public Fragment getItem(int position) { return ArrayFragment.newInstance(position%COUNT); // 3배로 리턴된 페이지를 보여준다. [1 2 3 4] [1 2 3 4] [1 2 3 4] 이렇게 보여지는 원리.. } //뷰페이저에서 보여질 총 페이지 수 @Override public int getCount() { return COUNT*3; } // 보여줄 페이지의 갯수를 3배로 리턴한다. } //뷰 페이저의 페이지에 맞는 fragment를 생성하는 객체 private static class ArrayFragment extends Fragment { int mPosition; //뷰 페이저의 페이지 값 //fragment 생성하는 static 메소드 뷰페이저의 position을 값을 받는다. static ArrayFragment newInstance(int position) { ArrayFragment f = new ArrayFragment(); //객체 생성 Bundle args = new Bundle(); //해당 fragment에서 사용될 정보 담을 번들 객체 args.putInt("position", position); //포지션 값을 저장 f.setArguments(args); //fragment에 정보 전달. return f; //fragment 반환 } //fragment가 만들어질 때 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mPosition = getArguments() != null ? getArguments().getInt("position") : 0; // 뷰페이저의 position값을 넘겨 받음 } //fragment의 UI 생성 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.layout1+mPosition, container, false); //미리 알고 있는 레이아웃을 inflate 한다. if(mPosition==0){ v.findViewById(R.id.btn1).setOnClickListener(mButtonClick); v.findViewById(R.id.btn2).setOnClickListener(mButtonClick); } else if(mPosition==1) { v.findViewById(R.id.btn3).setOnClickListener(mButtonClick); v.findViewById(R.id.btn4).setOnClickListener(mButtonClick); } else{ } return v; } } }
http://blog.daum.net/mailss/19 블로그 참조..
'Dev. 안드로이드 > 참고소스' 카테고리의 다른 글
안드로이드 폰 오라클 데이터베이스와 연동하기 ( model 1 : jsp ) (138) | 2012.03.19 |
---|---|
toast 메세지 연속 출력 및 커스텀 뷰 토스트 표시하기 (0) | 2012.03.16 |
안드로이드 어플 종료시 back 키 두번 눌러서 끄기 참고 소스 (0) | 2012.03.16 |
안드로이드 XmlPullParser 사용 예제 (0) | 2012.03.16 |
SQLiteOpenHelper 이용한 안드로이드 데이터베이스 관리 (0) | 2012.03.16 |