課題 こんなコードがあったとして // 1 getter val nickname: String? get() = _user.value?.nickname // 2 代入 val nickname: String? = _user.value?.nickname // 3 by lazy val nickname: String? by lazy { _user.value?.nickname } // 4 関数 fun nick…
課題 画面間の値渡しでBundleにEnumの値をセット、取得したい。どうすればよいか。 対応 EnumはSerializableなので Bundleの putSerializable メソッドが使える。 enum class Mark { HEART, SPADE, DIAMOND, CLUB } fun newInstance(): CardFragment { retur…
Android Gradle Plugin を4.0.0以上にするとD8/R8のDesugaringによってほぼすべての端末でJava8の追加APIが利用できるようになりますよ、という記事。 medium.com 設定は以下の通り。coreLibraryDesugaringEnabled と coreLibraryDesugaring を追加すれば良…
課題 Viewの表示・非表示を一括で管理するために androidx.constraintlayout.widget.Group でVIewをまとめたところ、そのGroup内のViewに対して 個別のVisibilityを設定しても反映されなくなった。 対応 Groupを使うのを諦め、ViewGroupで囲んでしまうのが無…
課題 これまでButterKnifeを使ってFragment及びViewHolderのView操作を記述してきたが、ViewBinding登場に伴いButterKnifeはdeprecatedになった。 ViewHolderをViewBindingを使って書き換えたいが、どうすればよいか。 対応 user.xmlとかいうユーザー一覧の…
課題 ViewModelのSavedStateHandleの特性について知りたい 結論 SavedStateHandleはプロセスがKillされた場合に状態が保持される アプリを正常終了した場合は状態がクリアされる SharedPreferenceの代替とはならない 調査 ViewModelの作成 まずViewModelを作…
課題 Android Studio 4.1 Beta 1がリリースされたため早速ダウンロードして起動してみたところ、 以下のエラーが出てビルドできなくなった。 Gradle sync failed: No such property: scope for class: com.android.build.gradle.internal.variant.Applicatio…
課題 UserをViewModelにLiveDataとして設定したが、Userオブジェクトのプロパティの変更を知りたい。どうすればよいか。 対応 LiveDataはvalueに値が代入されたタイミングでないとObserverに伝えてくれない。 参考サイトにはいくつかの対応案があるが、LiveD…
Toolbox Appとは ご存知の方も多いかもしれないが、Android StudioはJetBrainsの製品をベースに開発されている。 そのJetBransには多くの言語をサポートするためのそれぞれのIDE製品を提供しており、それらのIDEを管理するために Toolbox Appというものも出…
課題 これまで以下のような感じでメールを送信していたが、いつ頃からか'EXTRA_SUBJECT', 'EXTRA_TEXT'がGmailにセットされなくなった。 /** * メール送信用Intentを生成する */ fun getMailIntent(mailTo: String, subject: String, body: String): Intent …
課題 コンテンツのシェア機能利用時に Intent.createChooser したIntentに対し、EXTRA_INITIAL_INTENTS で ターゲットアプリごとに特別にカスタマイズしたLabeledIntentを渡していたが、Android10端末でシェア対象のアプリが数件しか表示されなくなった。 原…
課題 Androidの8.0からAutofill機能が追加され、メアドとパスワードを記憶、自動セットしてくれるようになったが、 新規入力画面ではメールアドレス、パスワードの保管を無効化したい。どうすればよいか。 対応 importantForAutofill を no にする <TextView android:importantForAutofill="no" /> 逆に yes</textview>…
課題 Fragmentから親ActivityのonActivityResultを呼びたい。どうすればよいか。 対応 昔の実装見たら解決済みだったのだけど、あれ、どうやるんだっけ?となったのでメモ。 onActivityResultをpublicでoverrideする onActivityResultはprotectedで定義され…
追記 この問題はInstall Referrerの 1.1.2 で解消されたらしい。まだ未確認だけどもう上げても大丈夫そう。 stackoverflow.com 課題 アプリをリリースしようとしたところ、 READ_PHONE_STATE が追加パーミッションとして要求されますと警告が出た。 原因 Pla…
課題 一部の端末(例えば Zenfone 3など) でアプリが起動しないという事象が発生している。スタックトレースを見るとWokrManagerのgetInstanceするところでクラッシュしていた。 Caused by: java.lang.IllegalStateException: at androidx.work.impl.WorkMan…
課題 View Bindingを使ってみたが、include タグ以下のVIewの情報が取得できない。 原因 Includeファイルに対してidを指定していない。View Bindingはidを付与したものに対してしかコードを生成しない。 対応 includeファイルにidを付与すると、そのファイル…
問題 Android Studioから端末にアプリをインストールしようとしたところ以下のエラーが発生。 Unable to find method 'com.android.tools.r8.CompatProguardCommandBuilder.setProguardSeedsConsumer 原因 build.gradle にあるcom.android.tools.r8の設定が…
課題 Android3.6がβ版に昇格していたのでアップデートして起動したところ、Gradleのアップデート案内が通知されたので更新したらビルドが通らなくなった。 Gradle Pluginのバージョンを上げたのが原因らしい。 対応 とりあえず app/build.gradle の設定を順…
FragmentStatePagerAdapter(fm: FragmentManager)がdeprecatedになってた。 第2引数に BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT か BEHAVIOR_SET_USER_VISIBLE_HINT を 指定するらしいんだけれども BEHAVIOR_SET_USER_VISIBLE_HINT もdeprecatedになってる。…
課題 ActivityManager.AppTask.moveToFront()メソッドは現在とは起動中のTaskをForegroundに持ってくるためのメソッド。 これがAndroid 10で機能しなくなっているかもしれない。 全くだめというよりは、うまく前に来ないような。すでに先頭にいるという扱い…
Figmaは慣れてくると超便利なんだけど、ComponentとFrameとGroupを理解しないと編集時にその便利さが享受できない。 課題 ComponentをFrameに変更したい 対応 Componentは直接は Uncomponent みたいなことができない。 Componentをコピーして同じ場所に貼り…
タイトルの通りなんだけど、Android Emulatorにapkがドラッグ&ドロップでインストールできるように なってた。PCからapkをエミュレータの画面上にドラッグするだけ あんまり使うことないかと思ってたけど偶然必要な機会があってやってみたら超簡単に入って…
課題 Android Stuio 3.5からはProguardよりもR8推奨ってことでR8を有効にした状態で リリースビルドをしようとしたらビルド中にNullPointerExceptionが発生してビルドできなかった。 対応 ググった感じだとOkHTTPを入れているとバージョンによっては発生する…
課題 Fragment.onCreateViewでViewを生成しているが、onActivityResult内でそのViewを使用しようとした際にエラーになるケースがある。 原因 通常Fragment.onActivityResultはActivity.onStart前に実行され、それまでにはFragment.onCreateViewは既に実行さ…
課題 指定したdpサイズに対応する、端末の解像度に応じた実際のピクセルサイズが知りたい。 対応 dimens.xmlを使う。 <resources> <dimen name="user_icon">40dp</dimen> </resources> var size = context.resources.getDimensionPixelSize(R.dimen.user_icon) 関連 takerpg.hatenablog.jp
課題 PicassoでWebP画像を表示したいが、WebPを表示するにはAcceptヘッダーにimage/webpが必要となる。どうすればよいか。 対応 OkHttpClientを作成し、Picasso.Builderを使ってdownloaderにセットする addHeaderの内容はChromeのデフォルト値に合わせてみた…
課題 Picassoのリクエストヘッダーの内容をStethoで確認したい。 どうすればよいか。 対応 以下のような感じでPicassoの初期化メソッドを用意し、Applicationクラスなどから一度だけ呼んであげれば良い。 BuildConfig.DEBUG がtrueの場合のみ処理されるよう…
onRewardedイベントでは リワード typeとamountのみ。IDやどのリワード動画サービスかは分からない カスタムリワード動画以外はSDKが提供されているので基本設定で使う分には特殊な実装は不要 テスト時にはテスト端末登録が必要 テスト端末登録を行うとAdMob…
挙動に関して不明な箇所があったので実際にやってみたメモ DebugViewはユーザープロパティの削除が反映されない(BigQueryには反映されている) DebugViewはユーザープロパティの追加が反映されないことがある(BigQueryには反映されている) 連続して2つセ…
課題 RecyclerView内のあるViewTypeのアイテムが表示されたタイミングでImpressionイベントを計測したい。 対応 RecyclerView.Adapter.onViewAttachedToWindow() メソッドをオーバーライドする。 override fun onViewAttachedToWindow(holder: RecyclerView.…