Java Stack/Android
RecyclerView의 Adapter와 ViewHolder
RecyclerView의 Adapter와 ViewHolder
2019.07.05MVVM에서는, View를 가지고 있는 ViewHolder나, ViewHolder에 데이터를 넣어주는 Adapter나 둘 다 (V)로 분류한다. ViewHolder데이터가 한 1만건 있다고 치면, 뷰를 1만개나 만드는건 화면에 다 보이지도 않고 비효율적이니까View는 화면에 보일 정도로 조금만 만든 다음에 화면이 이동하면 View에 들어가는 Data만 바꿔주는 식으로 View를 재활용하자는 컨셉. 즉, ViewHolder와 그가 갖고 있는 View 멤버변수는 만들었다 지웠다 하는게 아니라, 그 안에 들어가는 데이터만 바꿔주는 것임.(``kt val``)onBindViewHolder()에서 ViewHolder를 통해서 View에 해당 position의 data를 집어 넣어 주는 식으로 동작한다. Adapt..
MVVM과 Android DataBinding
MVVM과 Android DataBinding
2019.07.04MVVM에서의 가장 큰 특징은 옵저빙 이다. 리액티브 프로그래밍에서 말하는 옵저버 패턴과 같은 의미. View가 ViewModel이 가진 데이터를 옵저빙 하고 있다가 ViewModel의 데이터가 변경되면 자동으로 View도 갱신되는 방식 자동으로 View에 notify가 간다고 생각하면 된다. 그래서 ViewModel은 View에 대한 참조를 가지지 않는다. ViewModel입장에서는 내껏만 바꾸면 다른건 신경 안써도 되는거다. (그리고 이 옵저빙 과정에서 발생하는 View->ViewModel의 의존성을 줄이기 위해 안드로이드 데이터 바인딩을 사용한다. 즉, 데이터 바인딩과 MVVM은 별개의 개념이다.) 즉, MVVM으로 컴포넌트를 분리한다는건 기존처럼 Activity(View)에서 ViewModel의 ..
Chrome Custom Tabs
Chrome Custom Tabs
2018.12.30launching the browser is a heavy context switch that isn't customizable, while WebViews don't share state with the browser and add maintenance overhead.이런 단점들을 해결하기 위해 나온게 Chrome Custom Tab이다. 웹뷰와 CCT 중 뭘 써야할지 감이 잘 안올 때는,https://stackoverflow.com/questions/42689996/webview-vs-chrome-custom-tab 간단하게 쓸 때.launchUrl만 호출해도 된다.```ktval builder = CustomTabsIntent.Builder()val customTabsIntent = builder..
[Android] HTTP 요청 (Retrofit / OkHttp)
[Android] HTTP 요청 (Retrofit / OkHttp)
2018.12.26이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
Android Widget 제작 참고 자료 및 주의 사항
Android Widget 제작 참고 자료 및 주의 사항
2018.12.23기본적인 위젯 제작과 ListViewhttp://blog.naver.com/PostView.nhn?blogId=horajjan&logNo=220578698191전체적인 설명RemoteViewsListView, StackView : RemoteViewsService/RemoteViewsFactory https://docs.huihoo.com/android/3.0/resources/samples/StackWidget/src/com/example/android/stackwidget/StackWidgetService.html액티비티의 연산 결과를 위젯에서 가져오기 위해 SharedPreferences https://developer.android.com/guide/topics/appwidgets/#persist..
액티비티 : Activity life cycle, 백스택, singleTop
액티비티 : Activity life cycle, 백스택, singleTop
2018.05.20https://developer.android.com/guide/components/activities/activity-lifecycle?hl=ko https://developer.android.com/guide/components/tasks-and-back-stack?hl=ko
AlertDialog, Snackbar, Toast / String resource
AlertDialog, Snackbar, Toast / String resource
2018.05.20AlertDialog```ktfun finishDialog(activity : AppCompatActivity, title : String?, message : String?) { AlertDialog.Builder(activity).setTitle(title) .setMessage(message) .setCancelable(false) .setPositiveButton("종료", { _, _ -> activity.finish() }).show()}```내부에서 ``kt ContextThemeWrapper``를 사용하기 때문에 ``kt baseContext``를 넘기면 강제 종료된다. Snackbar```ktlistView.setOnItemClickListener { parent, v, position,..
Android Context 정리
Android Context 정리
2018.01.04Context란? + 안드로이드의 프로세스 / 어플리케이션 차이 https://stackoverflow.com/questions/10347184/difference-and-when-to-use-getapplication-getapplicationcontext-getbaseconcontext와 싱글턴 정리하면Application Context(``kt applicationContext``)는 어플리케이션 전역적으로 하나만 존재하는 싱글턴 객체이며Activity Context(``kt this``)는 Activity life-cycle을 따르는 Context다. View를 조작하거나 어떤 Activity와 밀접한 관련이 있는 경우 ``kt this``를, 나머지 경우(특히 싱글턴이나 DB)에는 ``kt ap..
adb로 디버깅
adb로 디버깅
2017.12.29https://developer.android.com/studio/command-line/adb.html?hl=ko#howadbworks ```bashadb devices``` adb로 DB 접근하기```bashD:\AndroidSDK\platform-tools>adb shellroot@generic_x86:/ # cd data/data/com.example.umbum.openweatherexp/databasesroot@generic_x86:/data/data/com.example.umbum.openweatherexp/databases #sqlite3 user.dbSQLite version 3.8.6.1 2015-05-21 17:24:32Enter ".help" for usage hints.sqlite>..
onClick in XML vs. onClickListener
onClick in XML vs. onClickListener
2017.12.29퍼포먼스는 둘 다 같다.코드가 길지 않다면 onClick을 사용하는 방식이,코드가 길어진다면 onClickListener를 사용하는 방식이 괜찮아 보인다. onClick in XML의 장점 ( API 4 부터 사용 가능 )``kt onClickListener()``를 지정하는 방식은 ``kt inflate`` 또는 ``kt findViewById()``로 View를 불러와야 하기 때문에 후자의 경우 리스너를 지정할 View 마다 id를 지정해주어야 하지만 ``kt onClick=``은 id를 지정할 필요가 없다.C#에서 리소스의 Event를 지정할 때 사용하는 방식도 이런 식이다.```xml``````ktfun onClickDelete(v: View) {}``` onClickListener의 장점``kt..
Android Permission 정리
Android Permission 정리
2017.12.24Android 6.0 Marshmallow(API 23) 이전에는 `` AndroidManifest.xml``에 필요한 위험 권한을 선언해놓고, 앱을 설치할 때 한 번에 권한을 획득하는 방식이었다.그러나 6.0부터는 런타임에 위험 권한을 요청해야 한다.기기에서 Android 5.1 이하를 실행 중이거나, 또는 앱의 `` targetSdkVersion``이 22 이하인 경우: 여러분이 매니페스트에 위험 권한을 나열하는 경우, 사용자는 앱을 설치할 때 권한을 부여해야 하며, 권한을 부여하지 않을 경우 시스템이 앱을 설치하지 않습니다.기기에서 Android 6.0 이상이 실행 중이고, 그리고 앱의 `` targetSdkVersion``이 23 이상인 경우: 앱이 매니페스트에 권한을 나열해야 하며, 그리고 앱이..
View와 layout Inflate. + ViewHolder // kotlinx
View와 layout Inflate. + ViewHolder // kotlinx
2017.12.22Anko등을 사용하지 않는 일반적인 경우라면 layout은 xml을 이용해서 만들기 때문에,xml layout을 불러와 실제로 앱에 그려주는 작업(View로 만드는 작업)이 필요한데 이를 inflate라고 한다.```ktval elementView = inflater.inflate(R.layout.layout_list_element, parent, false)``` ViewHolder를 사용하고 싶다면, inflate한 View가 가지고 있는 각각의 View 컴포넌트를 멤버로하는 ViewHolder를 만들고 `` ViewHolder``객체를 만든다. ``kt findViewById()``를 처음 한 번만 호출하고 결과를 ViewHolder에 저장해 놓는 방식으로, 매번 resolve할 필요가 없어 효율적..