일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 코틀린
- 프로그래머스
- RxJava
- 안드로이드
- flutter firestore
- livedata
- 알고리즘
- C
- Android P
- mfc
- dart
- kodility
- Java
- C/C++
- android push
- Python
- Rxjava2
- android architecture component
- NDK
- Kotlin
- C++
- Django REST
- RxAndroid
- FLUTTER
- Android
- 안드로이드 구글맵
- Django REST Android
- Flutter TextField
- Django REST framework
- UWP
- Today
- Total
개발하는 두더지
[Android] Fragment와 MVP 패턴을 이용한 탭 만들기 본문
http://duzi077.tistory.com/119 ( Fragment 를 이용한 탭 만들기 ) 에 이어서
MVP 패턴을 이용하여 TabLayout , ViewPager, Fragment를 이용한 탭을 만들어보도록 하겠습니다.
우선 MVP 패턴이란 ?
Model View Presenter
- View를 Model로부터 분리시키고 Presenter는 사이에서 중재자 역할을 합니다.
- Unit test를 쉽게할 수 있습니다.
- 일반적으로 View와 Presenter 는 1:1 매칭입니다.
Model Data에 직접 접근하고 관리한다. Presenter가 요청한 작업을 수행한다.
View 실제 View에 접근하고 화면을 갱신하는 역할을 한다.
Presenter View로부터 이벤트를 전달받고 View가 알지못하는 Data에 접근하고 로직을 수행하도록 Model 에 요청한다.
https://github.com/googlesamples/android-architecture/tree/todo-mvp ( 구글 MVP 예제 ) 를 참고하여 샘플을 만들었습니다.
결과물
소스코드
BaseView 생성
BaseView.java
Presenter를 설정하고 View에 Toast를 띄우는 인터페이스입니다.
BasePresenter 생성
BasePresenter.java
공통 로직이 있다면 여기에 추가합니다.
Contract 생성
RestaurantContract.java
Contract는 View와 Presenter를 연결해주는 인터페이스입니다.
각 Fragment 마다 BaseView와 BasePresenter를 상속받은 View, Presenter 인터페이스를 생성해야합니다.
즉, Base는 공통으로 작성해야되는 기능을 넣어주고 그 Base를 상속받아 각 Fragment의 View, Presenter 인터페이스를 생성해서 각각의 기능을 정의합니다.
PresenterImpl 생성
RestaurantPresenterImpl.java
Contract.Presenter를 implements한 Presneter 클래스입니다. View와 통신하기 위해 View 객체를 생성자 파라미터로 받아서 초기화합니다.
샘플에서 buttonClickAction 메소드가 실제로는 Model과 연결된 로직을 수행하는 부분입니다.
간단하게 로직이 처리됐다고 생각하고 View에 Toast를 띄우는 ShowToast 메소드만 출력하는 기능을 넣어놨습니다.
Fragment 생성
RestaurantTabFragment.java
Fragment는 Contract.View를 implements 한 View 클래스입니다.
탭마다 다른 Fragment 클래스를 만들어야합니다.
버튼이 클릭되면 Presenter의 buttonClickAction 메소드가 호출됩니다.
Presenter에서 로직이 수행되고 마지막에 ShowToast를 호출하면
Fragment에서 오버라이드된 ShowToast가 실행하면서 화면에 Toast가 띄워지게 됩니다.
Fragment Layout 생성
restaurant_frag.xml
탭을 클릭했을때 보여지는 페이지입니다.
탭마다 다른 Fragment 레이아웃을 만들어야합니다.
MainActivity 생성
MainActivity.java
위의 Google Sample과 조금 다릅니다.
TabPagerAdapter 안에 각 Fragment의 Presenter를 관리합니다.
MainActivity Layout 생성
activity_main.xml
TabLayout과 ViewPager를 그립니다.
gradle 파일에 선언해야 사용 가능합니다.
dependencies {
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:design:25.3.1'
}
TabPagerAdapter 생성
TabPagerAdapter.java
FragmentPagerAdapter를 상속받은 Adapter입니다.
탭을 클릭했을 때 getItem 메소드가 호출되고 해당되는 Fragment 객체를 반환합니다.
'Java,Android' 카테고리의 다른 글
[Android] Android Studio + Android.mk 환경에서 .so 파일과 jar 파일 만들어서 배포하기 / 18.07.09 수정!! (41) | 2017.07.19 |
---|---|
[Android] RecyclerView + TMAP OpenAPI를 이용한 자동완성 검색창 만들기 (0) | 2017.06.26 |
[Android] 프래그먼트(Fragment)에 구글맵(GoogleMap) 자동완성검색 위젯 추가하기 (20) | 2017.05.19 |
[Android] 안드로이드 6.0이상 런타임에 권한 요청 획득 (0) | 2017.05.18 |
[Android] 구글맵(GoogleMap) 현재위치 따라가기 (81) | 2017.05.18 |