기술 블로그
[안드로이드 복습]14장 뷰페이저 본문
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를 상속받아 사용해야한다.
'Android' 카테고리의 다른 글
17장) 브로드캐스트 리시버 (0) | 2019.01.24 |
---|---|
[안드로이드 복습] 13장 인터페이스 이용한 콜백 프래그먼트 (0) | 2018.11.26 |
[안드로이드 복습]프래그먼트 (0) | 2018.11.24 |
[안드로이드 복습] 9강 WebView (0) | 2018.11.21 |
[안드로이드 복습]12장 액티비티 생명주기 (0) | 2018.11.19 |