일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 알림
- CustomView
- Android
- onLayout
- View
- ViewModel
- recyclerview
- kotlin
- Behavior
- onMeasure
- BOJ
- sqlite
- notification
- 알고리즘
- Coroutine
- 안드로이드
- Algorithm
- room
- HTTP
- 백준
- activity
- Navigation
- CollapsingToolbarLayout
- hilt
- lifecycle
- DataBinding
- 코틀린
- CoordinatorLayout
- LiveData
- AppBarLayout
- Today
- Total
목록Android (111)
개발일지

양방향 데이터 바인딩 EditText에서 android:text="@{string}" 이런식으로 바인딩 하는 것을 단방향 바인딩이라고 한다. (Data를 EditText에 일방적으로 바인딩하는 개념) 양방향 데이터 바인딩은 EditText, RadioButton, DataPicker등 데이터가 변하는 View가 역으로 Data로 바인딩하는 것이다. * 기본으로 지원하는 Two-Way-Databinding LifeCycleOwner 설정하기 binding.lifecycleOwner = lifecycleOwner ViewModel 만들기 원래 양방향 데이터 바인딩은 ObservableField를 통해 타입을 정해서 가능했지만 LiveData도 지원하기 시작했다. 이번 예제에서는 LiveData를 통해 양방향..

Material Design Material Design에서 제공하는 요소들을 Navigation을 통해 쉽게 구현할 수 있습니다. Toolbar ... android:label을 통해 Toolbar의 Title을 설정할 수 있다. binding.toolbar.setupWithNavController(findNavController()) Toolbar의 setupWithNavController를 사용해서 지정할 수 있다. val appBarConfiguration = AppBarConfiguration(setOf(R.id.main, R.id.profile)) binding.toolbar.setupWithNavController(findNavController(), appBarConfiguration) 경..

Safe Args Navigation에서 데이터를 전달하는 Bundle 방식은 key-value 구조로 key값에 string을 입력하는 과정이나 value를 캐스팅하는 과정에서 개발자가 실수할 가능성이 있지만 Safe Args는 유형 안전성을 보장하므로 데이터를 탐색하고 전달할 때는 Safe Args를 사용하는 것이 좋습니다. Dependency build.gradle (Project) buildscript { repositories { google() } dependencies { def nav_version = "2.3.4" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } } build.gradle (..

Action Navigation에서 UI 대상간의 이동을 Action이라 하며 Action은 NavGraph에서 정의하고 NavController.navigate()를 사용해서 이동한다. => Activity간의 이동을 startActivity()로 이동하는 것과 같음 NavGraph에서 UI 대상을 정의할 때 넘겨 받을 Argument를 정의하고 Action을 정의할 때 Animation과 Pop Behavior 등을 정의한다. NavController 접근방법 Activity.findNavController(viewId: Int) Fragment.findNavController() View.findNavController() Animation Navigation의 장점으로 Action간의 Animat..

Navigation Navigation은 UI의 전환을 쉽게 도와주고 시각화 하는 Jetpack Architecture입니다. 기존의 Activity 중심의 UI 구성이 아닌 Fragment와 FragmentTransaction을 통해 UI를 구성하여 더 성능이 좋습니다. 구성 NavGraph : 탐색에 관련된 정보가 모여있는 XML 리소스입니다. UI 대상과, UI 탐색에 관한 정보가 저장됩니다. NavHost : 탐색 그래프에서 UI 대상을 표시하는 빈 컨테이너입니다. NavHostFragment로 표현합니다. NavController : NavHost에서 탐색을 관리하는 객체입니다. 장점 프래그먼트 트랜잭션 처리 기본적으로 '위로'와 '뒤로'작업을 올바르게 처리 (위로 버튼은 앱을 종료하지 않는다...
Hilt Entry Point Entry Point는 Hilt가 Inject하는 진입점이다. Activity, Fragment 같이 Android Framework에 의해 제공되는 Component들은 @AndroidEntryPoint를 통해 진입점을 지정할 수 있고, 일반 객체들도 @Inject constructor를 정의하여 진입점을 만들어 Inject할 수 있다. 하지만 Hilt가 지원하지 않는 Class에 Inject할 경우가 존재하고 이를 해결하기 위해 EntryPoint를 설정해야한다. class DeleteToDoSnackbar( private val view: View, private val todo: ToDo ) { private val entryPoint by lazy { EntryPo..

DataStore Jetpack DataStore는 SharedPreferences를 대체하기 위해 나왔다. DataStore는 Key-Value뿐만 아니라, Protocol Buffers를 이용하여 Object를 저장할 수 있고, 동기/비동기를 지원하며 IO에 대한 Exception도 제공하기 때문에 유연하게 코드를 작성할 수 있다. * Android Developer에서 복잡한 구조의 데이터는 Room을 사용해서 저장하는 것을 권장한다. SharedPreferences 단점 Key-Value 형태로 XML파일에 값을 저장하고 String 또는 Primitives 값만 저장할 수 있다. => 이를 해결하고자 JSON이나 XML형식의 String으로 저장하지만 Type Safety를 보장하지 않기 때문에..

ViewModelScope ViewModel마다 존재하는 Scope이다. ViewModel이 삭제되면 자동으로 취소된다. class ExampleViewModel : ViewModel() { init { viewModelScope.launch { /* ViewModel이 사라지면 종료된다. */ } } } LifeCycleScope LifeCycle 객체마다 존재하는 Scope이다. Create, Start, Resume 3가지의 Mode를 지원하고 Active상태(화면에 보이는 상태)일 때만 수행된다. class CoroutineFragment : BaseFragment(R.layout.fragment_coroutine) { private var count = 0 private val logList b..