기술 블로그

[안드로이드 복습]14장 뷰페이저 본문

Android

[안드로이드 복습]14장 뷰페이저

jaegwan 2018. 11. 29. 00:21
반응형

xml파일에 ViewPager를 넣어준다


뷰페이저는 여러개의 프래그먼트등의 요소를 넣어서 밀어서 사용할 수 있게 해준다. 


app에 오른쪽마우스 클릭하고 프래그먼트를 선택해서 선택하자 


 지금은 블랭크 ,리스트 ,with a+1 프래그먼트를 이용한다.



프래그먼트 3개를 만들었으면 


메인엑티비티에 있는 뷰페이저에 표시를 해야한다.


뷰페이저도 어뎁터를 사용한다. 


뷰페이저어뎁터.java파일을 만들어준다

( pragmentPagerAdapter를 상속)(alt 엔터로 기본 메소드 생성)


그 안에서 ArrayLIst<Fragment> mData를 맴버로 선언하고 


뷰페이저어뎁터 이름으로 된 메소드 안에 

mdate 객체를 생성하고 

add(new ColorFragment()); 이런식으로 프래그먼트 객체를 집어넣는다.


getItem안에는 

mData.get(position number); 를 사용하여 포지션넘버에 따른 프래그먼트를 리턴하자


getCount는 mData.Size();로 가져오자 




그리고 이제 메인액티비티에서 연결해 보자 onCreate안에 


ViewPager  viewPager = findviewbyid(R.id.pager);


어뎁터 객체도 가져오자

MypagerAdapter adapter = new MypagerAdapter(getSupportFragmentManager());

파라미터프래그먼트 매니져를 넘겨주어야 하는데 

getSupportFragmentManager를 넘겨준다. 


그리고 중요한것은 viewpager에 어탭터를 넣어준다


viewPager.setAdapter(adapter);



여기서 실행하면 itemFragment 안에서 콜백을 생성해게 둿기떄문에


매인액티비티에서 구현 해야 에러가 안나게 설정되어있다.


@Override
public void onListFragmentInteraction(DummyContent.DummyItem item) {
Toast.makeText(this, item.toString(), Toast.LENGTH_SHORT).show();
}

토스트정도만 구현해주자 



보통은 탭 레이아웃과 연동한다. 탭 레이아웃도 사용해보자


메인xml 리니어레이아웃 안

<android.support.design.widget.TabLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabSelectedTextColor="#0000ff"
app:tabTextColor="#ff0000"
android:id="@+id/tap">

</android.support.design.widget.TabLayout>


<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />




중요) 탭레이아웃은 디자인서포트라이브러리라는 곳에 있어서 빌드그래들(Module:app)에 따로 추가 해 주어야한다.

dependencies 안에

implementation 'com.android.support:design:28.0.0'


를 추가한다 버전은 appcombat과 같이한다.


다른 방법도 있다.


file내 project Structure 메뉴로 들어가서 모듈 앱을 클릭 한 후 dependencies 


추가 라이브러리 디팬던시 -> design검색 클릭후 적용 (버전은 수동으로 맞춰야함)



이제 탭레이아웃과 뷰페이저를 연동해야한다


탭레이아웃을 가져오고 연결해준다. onCreate안에 


taprayout.setupWithViewPager


TabLayout tabLayout =(TabLayout) findViewById(R.id.tap);
tabLayout.setupWithViewPager(viewPager);



그리고 제목도 나올 수 있게 MyPagerAdapter도 조작해준다.


getPageTtile이라는 메서드를 오버라이드 한다. 


@Override
public CharSequence getPageTitle(int position) {//타이틀을 정의하는 콜백메서드 Charsequence String이 구현하는 인터페이스
return position+"번째";//타이틀
}



지금 위 예제에는 pragmentPagerAdapter를 상속받았지만pragmentStatePagerAdapter를 상속받을 수도 있다.



각 프래그먼트의 상태를 계속 보존하고 싶다면 pragmentStatePagerAdapter를 상속받아 사용해야한다. 

반응형
Comments