[Android] 안드로이드 인앱 리뷰

업무상 필요하여 인앱리뷰를 찾아보았다.  의존성 구성으로 아래를 추가하고 1 implementation 'com.google.android.play:core:1.10.3' 코드는 아래와 같다. 1 2 3 4 5 6 7 8 9 10 11 val manager = ReviewManagerFactory.create( this ) manager.requestReviewFlow().addOnCompleteListener { if (it.isSuccessful) { val flow = manager.launchReviewFlow( this , it.result) flow.addOnCompleteListener { // 리뷰 등록 완료 시 // 주의!! 리뷰 등록을 완료하지 않고 리뷰 등록 창을 닫거나 "나중에" 클릭시에도 이곳이 호출됨 }.addOnFailureListener { } } }

ConstraintLayout 안에 RecyclerView 사용시 ViewHolder가 무한대로 갱신되는 문제

만약 ViewPager를 사용하고 Adapter안에서 호출되는 Fragment내부에서 ConstraintLayout을 사용하고 있는 경우 RecyclerView를 사용시 다음과 같은내용을 주의하기 바란다. ConstraintLayout을 사용하여 레이아웃 구성시 RecyclerView를 추가하는 경우 리스트 특성상 가변 높이나 가변 너비를 설정하기 위하여 layout_constrainedHeight 또는 layout_constrainedWidth 값을 true로 설정하는 경우가 있는데 이 레이아웃이 ViewPager 하위에 있다면 RecyclerView의 아이템이 무한대로 갱신되는 문제가 있다. 필자의 경우 대안이 없어서 RecyclerView의 clipToPadding 속성을 false로 하여 하단 padding값을 주어서 해결하였다. 

[Android] Javascript interface 를 사용한 함수 호출시 Dialog show시 유의사항

main thread가 아닌 별도 thread에서 ui 관련 동작시 아래와 같은 예외를 볼 수 있다. IllegalStateException Must be called from main thread of fragment host 네이티브 코드에서 실행한 것이 아닌 웹뷰에서 실행시킨 함수를 별도 쓰레드로 보는것 같다. Dialog show부분을 runOnUiThread를 사용하여 실행시켜 문제를 해결 하였다.

[Android] Fragment를 layout 파일에서 적용시 InflateException 오류 발생

Fragment를 이용한 화면 구성 시 Java나 kotlin코드상에서 FragmentManager를 활용하는 방법 외의 아래처럼 레이아웃 파일에 직접 구성하는 방법이 있다. <LinearLayout             android:id="@+id/layout"             android:layout_width="match_parent"             android:layout_height="match_parent"             android:orientation="horizontal"             android:visibility="gone">             <fragment                 android:id="@+id/customFragment"                 android:name="com.dev.guy"                 android:layout_width="0dp"                 android:layout_height="match_parent"                 android:layout_weight="9" /> </LinearLayout>...