앞에서 살펴본 것을 바탕으로 유저와의 인터랙션을 담당하는 UI Component를 액티비티에서 분리시키는 작업을 진행해보았다.
UI Component의 역할
- 사용자의 입력(e.g. 버튼 클릭)을 수신한다.
- 입력을 상위 레이어 Activity에게 보고한다.
- 그리고 Activity가 bind하는 결과값을 UI에 반영되도록 업데이트한다.
목표
구현해야할 기본적인 NavigationDrawer의 기능
- Navigation Drawer를 열고 닫을 수 있다.
- Drawer의 아이템을 클릭할 수 있다.
- Activity는 클릭된 Drawer 아이템을 보고받는다.
디자인
android.widget
패키지만 분리한 클래스들은 `WidgetView`라는 postfix규칙을 사용하여 이름을 짓는다.

NavDrawerWidgetView
는 NavigationDrawer UI를 구성하는 클래스이다.
기존의 Activity는 onCreate()에서 setContentView(view)
메소드를 실행하여, xml 뷰를 액티비티와 연결한다.
하지만NavDrawerWidgetView가 XML과 연결되어 있는 UI Component이므로, Activity에서 setContentView(NavDrawerWidgetView)
를 하여 WidgetView와 Activity를 연결한다.
예제
// [WidgetView]와 [XML]의 연결
// NavDrawerWidgetView
class NavDrawerWidgetView(
val layoutInflater: LayoutInflater,
val parent: ViewGroup?,
@LayoutRes val layoutId: Int
) {
private val rootView: View = layoutInflater.inflate(layoutId, parent, attachToRoot)
}
// UI Controller(policy) 역할만을 남겨두고 UI는 WidgetView 클래스로 분리시킨다.
class MainActivity : AppCompatActivity(), NavDrawerWidgetView.Listener {
private lateinit var widgetView : NavDrawerWidgetView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
widgetView = widgetViewFactory.createNavDrawerWidgetView(null)
setContentView(widgetView.getRootView()) // [Activity]와 [WidgetView]의 연결
}
}


실행결과
'Android' 카테고리의 다른 글
SearchView에서 Soft Keyboard 보여주기 (0) | 2021.12.03 |
---|---|
Android Permission 요청하기 (0) | 2021.12.02 |
NavigationDrawer와 Toolbar 연동하기 (0) | 2021.12.02 |
Toolbar와 ActionBar의 차이점 (0) | 2021.12.02 |
Toolbar에 메뉴 추가하기 (0) | 2021.12.01 |