-
프래그먼트 + ViewPager안드로이드/학습&강좌 2015. 6. 5. 11:06
이전 포스팅에서 언급했듯이 Fragment 동작에 ViewPager 를 연결해 보도록 하겠습니다.
기본적인 ViewPager는 SDK 에서 제공하지 않고
android.support.v4 에서 제공하고있으니
해당 jar 를 추가해야 합니다.
ViewPager Reference
http://developer.android.com/reference/android/support/v4/view/ViewPager.html
Project Properties -> Java Build Path -> 에서 위와같이 SDK가 설치된 경로에서 jar 파일을 Add 시키면 됩니다.
기존 main,xml 에서
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="0.2">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/btn_01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="버튼1" />
<Button
android:id="@+id/btn_02"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="버튼2" />
<Button
android:id="@+id/btn_03"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="버튼3" />
</LinearLayout>
</LinearLayout>
<!-- 프래그먼트 노출 영역 -->
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_weight="0.8"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
</android.support.v4.view.ViewPager>
<LinearLayout
android:visibility="gone"
android:id="@+id/target_fragment"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:orientation="vertical" />
</LinearLayout>
기존 LinearLayout 부분을 GONE 시키고 그 위치에 ViewPager 를 얹혀 두었습니다.
코드 부분은 간단하게 직관적인 클래스를 바로 적용했습니다. 기본개념을 이해 하기 좋게?.
MainActivity.java
public class MainActivity extends FragmentActivity implements OnClickListener{ private Button mBtn01, mBtn02, mBtn03; //프래그먼트 이동 버튼 private Fragment frReplaceFragment = null; /** * ViewPager 관련 추가 */ private ViewPager mViewpager; private PagerAdapter mPagerAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mBtn01 = (Button)findViewById(R.id.btn_01); mBtn01.setTag(1); mBtn02 = (Button)findViewById(R.id.btn_02); mBtn02.setTag(2); mBtn03 = (Button)findViewById(R.id.btn_03); mBtn03.setTag(3); mBtn01.setOnClickListener(this); mBtn02.setOnClickListener(this); mBtn03.setOnClickListener(this); mViewpager = (ViewPager)findViewById(R.id.pager); mPagerAdapter = new FragmentStatePagerAdapter(getSupportFragmentManager()) { @Override public int getCount() { // TODO Auto-generated method stub return 3; } @Override public Fragment getItem(int position) { switch (position) { case 0: frReplaceFragment = new FirstFragment(); break; case 1: frReplaceFragment = new SecondFragment(); break; case 2: frReplaceFragment = new ThirdFirstFragment(); break; default: break; } return frReplaceFragment; } }; mViewpager.setAdapter(mPagerAdapter); // setFragmentChange(1); } @Override public void onClick(View v) { /** * 버튼 동작 변경. */ Log.d(">> ", "" + (Integer)v.getTag()); switch (v.getId()) { case R.id.btn_01: // Toast.makeText(this, "01", Toast.LENGTH_SHORT).show(); // setFragmentChange((Integer)v.getTag()); mViewpager.setCurrentItem((Integer)v.getTag() - 1); break; case R.id.btn_02: // setFragmentChange((Integer)v.getTag()); mViewpager.setCurrentItem((Integer)v.getTag() - 1); break; case R.id.btn_03: // setFragmentChange((Integer)v.getTag()); mViewpager.setCurrentItem((Integer)v.getTag() - 1); break; } } //프래그먼트 이동 public void setFragmentChange(int fragmentIdx){ Log.d(">>>>", "FragmentIdx : " + fragmentIdx); switch (fragmentIdx) { case 1: frReplaceFragment = new FirstFragment(); break; case 2: frReplaceFragment = new SecondFragment(); break; case 3: frReplaceFragment = new ThirdFirstFragment(); break; default: break; } // replace fragment final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.target_fragment, frReplaceFragment); //Fragment Stack 추가 // transaction.addToBackStack(null); // Commit the transaction transaction.commit(); } }
바뀐 부분은 기존 프래그 먼트 이동시 setFragmentChange 를 사용했으나
ViewPager가 View를 직접관리 하므로 FragmentStatePagerAdapter 를 통해 화면 전환이 되게 됩니다.
결과 화면
좌우로 플리킹 Swipe 하면 동작하게 되고, 버튼 클릭이벤트는
mViewpager.setCurrentItem((Integer)v.getTag() - 1);
ViewPager에 인덱스만 셋팅하는 것으로 끝이납니다.
다음엔 이 화면에
NavigationDrawer
요놈을 연결해 보도록 하겠습니다.참고소스 : 댓글ㄳ~ !!'안드로이드 > 학습&강좌' 카테고리의 다른 글
RelativeLayout 속성정리 (0) 2015.06.18 Navigation Drawer를 사용해보자. (0) 2015.06.08 프래그먼트 사용해보기 (0) 2015.06.04 AdMob 내가 만든 앱에 광고 넣기 (0) 2015.06.04 Blink Animation 적용하기 (0) 2015.06.03 EditText InputType 속성 정의 (0) 2012.11.19 인텐트로 클래스 데이터 넘기기 (1) 2011.12.17 내 App 리스트 보기 & Mp3 파일 Album_Art 연결하기 (3) 2011.11.23 WebView 로딩시 프로그래스바 표시 (2) 2011.08.31 CoverFlow Version2 (Matrix 를 이용) (0) 2011.08.25 댓글