일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Retrofit
- coroutine
- 코루틴
- dart
- 깃헙
- Android
- 의존성주입
- 안드로이드 스튜디오
- 안스
- 에러
- 웹뷰
- RecyclerView
- 안드로이드스튜디오
- 스튜디오
- studio
- 안드로이드
- error
- 레트로핏
- image
- Kotlin
- WebView
- viewpager
- 코틀린
- ADB
- GIT
- build
- 유튜브
- Github
- Gradle
- MVVM
- Today
- Total
목록안드로이드 (149)
코딩하는 일용직 노동자
생성자 없이 ViewModel을 만들어 사용하는 것은 매우 간단합니다. 하지만 ViewModel을 이용하다보면 repository 나 인스턴스들을 파라메터로 넘겨서 생성하는 경우가 많습니다. 일단 간단히 name을 전달하는 ViewModel을 만들어 테스트 해보겠습니다. class ViewModelActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_view_model) try { var viewModel = ViewModelProvider(this).get(MyViewModel::cl..
MVVM 으로 개발할때 ViewModel은 View를 몰라야 합니다. (ViewModel을 만들고 사용하는 activity가 자신의 context를 넘겨주거나 하지 않습니다.) 때문에 ViewModel에서 View로 이벤트나 결과를 전달할 경우에는 View가 ViewModel을 observe 하다가 상태가 변하면 그에따른 처리를 하게 합니다. // ViewModel var resetList = MutableLiveData().apply { value = false } ... /** * Search 버튼 클릭 처리. */ fun onClickSearch() { if (!TextUtils.isEmpty(etStr)) { mPage = 1 resetList.value = true searchImage(etSt..
레이아웃을 수정한 후 앱을 재시작해보니 곧바로 죽는 현상이 발생했습니다. 로그를 보니 아래와 같은 에러메세지를 볼 수 있었습니다. All children of ConstraintLayout must have ids to use ConstraintSet 내용을 보니 ConstraintLayout 에서는 child layout 에 id가 항상 지정이 되어 있어야 한다는 것이었습니다. 소스를 보니 새로 추가한 레이아웃에 id가 지정이 안되어 있었고, id를 만들어주니 에러는 곧바로 해결됐습니다.
Kotlin Collections function fun get(index: Int): E 인덱스의 항목을 반환 fun clear() 모든 항목을 제거 fun indexOf(element: E): Int 지정된 항목의 인덱스를 반환 fun isEmpty(): Boolean 컬렉션이 비어있는지 반환 fun contains(element: E): Boolean 지정된 항목이 컬렉션에 포함되어 있는지 반환 fun subList(fromIndex: Int, toIndex: Int): List 시작 인덱스부터 끝 인덱스 -1 까지의 범위의 리스트를 반환 fun Iterable.all(predicate: (T)->Boolean): Boolean 모든 항목이 지정된 조건에 만족할 경우 true 반환 ex) list...
공지사항을 표시할 팝업을 만들려고 합니다. Dialog 안에는 뷰페이저가 있고 아이템으로는 ImageView 하나만 있는 Fragment 를 갖고 있습니다. ImageView의 height를 wrap_content로 설정하고 adjustBoundView = true로 설정했습니다. 하지만 뷰페이저의 height를 wrap_content로 설정을 해도 실제 구동시 match_parent로 표시되는 문제가 있습니다. 이를 해결하려면 ViewPager를 상속받은 CustomViewPager를 만들어서 onMeasure를 오버라이딩 해줘야 합니다. /** * 설명 : 일반적인 ViewPager 는 height 값이 화면 전체를 갖는다. * wrap_content 만큼만 갖게 하기 위해 onMeasure 를 오버..
최근 업데이트 후 멀쩡하던 new ViewModelProvider(this).get(MyAndroidViewModel.class) 에서 Cannot create an instance of class 에러가 발생했습니다. java.lang.RuntimeException: Cannot create an instance of class my.custom.viewmodel.CustomViewModel at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:202) at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:135) at an..
라운드된 배경에 알맞게 view를 잘려 보이도록 처리하는 방법입니다. 흰색 라운드 배경위에 RecyclerView 를 배치했는데 배경의 라운드와 딱맞게 이미지가 가려져 보이도록 처리했습니다. https://youtu.be/d1BPxyT_Iog 실제 구현 영상 import android.content.Context; import android.graphics.Canvas; import android.graphics.Path; import android.graphics.RectF; import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; /**..
유튜브를 웹뷰로 보여주도록 처리를 했는데 사이드 이펙트가 있었습니다. 전체화면 모드로 이동 후 복귀하면 웹뷰에 보여지는 화면 UI가 너무 이상하게 나오는겁니다. 또한 전체화면 모드에서 가로모드로 플레이가 되지 않습니다. 첨부된 소스를 이용하면 전체화면 모드시 가로모드로 전환해서 플레이가 됩니다. 또한 Back key 를 눌러 복귀해도 UI 상에 문제도 발생하지 않습니다. private fun setWebViewYoutube(wvYoutube: WebView, movieId: String) { wvYoutube.settings.apply { javaScriptEnabled = true setAppCacheEnabled(true) pluginState = WebSettings.PluginState.ON } ..
유튜브에서 url을 공유할때 보면 www.youtu.be/nA8PosPb70c 이런식으로 url 이 클립보드에 복사됩니다. 이걸 웹뷰에서 열면 영상 뿐만 아니라 좋아요 버튼같은 유튜브의 다른 불필요한 UI도 화면에 표시됩니다. 웹뷰에 유튜브 영상 알맹이만 꽉차게 표시하고 싶으면 웹뷰에 www.youtube.com/embed/영상아이디 이렇게 하면 됩니다. 영상아이디는 유튜브 공유 URL 의 가장 마지막 / 뒤에 영문+숫자가 아이디입니다. www.youtube.com/embed/nA8PosPb70c 이렇게 호출시키니깐 웹뷰 화면에 영상이 꽉 차게 표시 됩니다. ^^ wvYoutube.settings.apply { javaScriptEnabled = true setAppCacheEnabled(true) pl..
전체화면 사이즈의 Dialog 로 만들어진 화면이 있습니다. 메인화면에서 이동되는 서브화면이 모두 Dialog 로 만들어진 화면입니다. 그리고 이 화면은 웹뷰가 전체화면 사이즈로 배치되어 있습니다. 실행해보면 웹뷰로된 액티비티와 별반 다를게 없는 서브화면입니다. 이 화면이 키보드가 올라와있는 상태에서 웹의 팝업이 뜨게되면 키보드가 내려가면서 해당 부분이 제대로 그려지지 않아 하얗게 보이는 현상이 발생했습니다. 버튼 클릭시 키보드가 내려가는 시간과 팝업이 보이는 시간이 같아서 발생하는듯 합니다. 처음에는 팝업이 보이는 타이밍을 0.2~0.3초 정도 딜레이를 주면 되지 않을까 했는데... 문제는 로그인 화면뿐만 아니라 텍스트입력창이 있는 다른 여러 서브화면에서 똑같은 현상이 있기때문에 모든 화면의 팝업들에 ..