前人未踏の領域へ Androidアプリ開発編

Androidアプリ開発に関する調査メモ置き場。古い記事にはアプリ以外も含まれます。

2020-01-01から1年間の記事一覧

Retrofit:responseBodyがnullのsuspend関数を定義する

課題 Retrofit2でレスポンスが空のsuspend関数を定義したい場合、以下の書き方だとエラーになる。 suspend fun like( itemId:Int ) :Unit // 単にCallを外しただけだとNG。Void, Unit?も同様 <クラス名> was null but response body type was declared as no…

suspend関数を処理可能なラムダパラメータを定義する

タイトルも本文も何言ってるか分からないかもしれないけれどちょっと感動したので。 課題 ViewModel内の関数で、コルーチン内部でラムダを実行させたい。 このラムダは内部でRetrofitによるsuspend関数のAPI呼び出しを行うためsuspend関数の実行が必要である…

Kotlin : 代入とgetterと by lazy

課題 こんなコードがあったとして // 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…

Android: BundleにEnumをセットする

課題 画面間の値渡しでBundleにEnumの値をセット、取得したい。どうすればよいか。 対応 EnumはSerializableなので Bundleの putSerializable メソッドが使える。 enum class Mark { HEART, SPADE, DIAMOND, CLUB } fun newInstance(): CardFragment { retur…

Android: 追加のJava言語APIサポート(Java8)

Android Gradle Plugin を4.0.0以上にするとD8/R8のDesugaringによってほぼすべての端末でJava8の追加APIが利用できるようになりますよ、という記事。 medium.com 設定は以下の通り。coreLibraryDesugaringEnabled と coreLibraryDesugaring を追加すれば良…

Android constraintlayout.widget.GroupのメンバーViewに個別のvisibilityが効かない

課題 Viewの表示・非表示を一括で管理するために androidx.constraintlayout.widget.Group でVIewをまとめたところ、そのGroup内のViewに対して 個別のVisibilityを設定しても反映されなくなった。 対応 Groupを使うのを諦め、ViewGroupで囲んでしまうのが無…

Android: ViewBindingでViewHolderの記述をシンプルにする

課題 これまでButterKnifeを使ってFragment及びViewHolderのView操作を記述してきたが、ViewBinding登場に伴いButterKnifeはdeprecatedになった。 ViewHolderをViewBindingを使って書き換えたいが、どうすればよいか。 対応 user.xmlとかいうユーザー一覧の…

Android: ViewModelのSavedStateHandleについて

課題 ViewModelのSavedStateHandleの特性について知りたい 結論 SavedStateHandleはプロセスがKillされた場合に状態が保持される アプリを正常終了した場合は状態がクリアされる SharedPreferenceの代替とはならない 調査 ViewModelの作成 まずViewModelを作…

Android Studio 4.1 Beta 1に上げる際にビルドできなくなる

課題 Android Studio 4.1 Beta 1がリリースされたため早速ダウンロードして起動してみたところ、 以下のエラーが出てビルドできなくなった。 Gradle sync failed: No such property: scope for class: com.android.build.gradle.internal.variant.Applicatio…

Android: LiveDataでオブジェクトのプロパティの変更を監視する

課題 UserをViewModelにLiveDataとして設定したが、Userオブジェクトのプロパティの変更を知りたい。どうすればよいか。 対応 LiveDataはvalueに値が代入されたタイミングでないとObserverに伝えてくれない。 参考サイトにはいくつかの対応案があるが、LiveD…

Android JetBrains Toolbox Appのススメ

Toolbox Appとは ご存知の方も多いかもしれないが、Android StudioはJetBrainsの製品をベースに開発されている。 そのJetBransには多くの言語をサポートするためのそれぞれのIDE製品を提供しており、それらのIDEを管理するために Toolbox Appというものも出…

Android:Email送信時にEXTRA_SUBJECT、EXTRA_TEXTが反映されない

課題 これまで以下のような感じでメールを送信していたが、いつ頃からか'EXTRA_SUBJECT', 'EXTRA_TEXT'がGmailにセットされなくなった。 /** * メール送信用Intentを生成する */ fun getMailIntent(mailTo: String, subject: String, body: String): Intent …

Android 10以降でアプリシェア時にEXTRA_INITIAL_INTENTSが機能しない

課題 コンテンツのシェア機能利用時に Intent.createChooser したIntentに対し、EXTRA_INITIAL_INTENTS で ターゲットアプリごとに特別にカスタマイズしたLabeledIntentを渡していたが、Android10端末でシェア対象のアプリが数件しか表示されなくなった。 原…

メアド、パスワードの入力候補を無効化したい

課題 Androidの8.0からAutofill機能が追加され、メアドとパスワードを記憶、自動セットしてくれるようになったが、 新規入力画面ではメールアドレス、パスワードの保管を無効化したい。どうすればよいか。 対応 importantForAutofill を no にする <TextView android:importantForAutofill="no" /> 逆に yes</textview>…

Fragmentから親ActivityのonActivityResultを呼ぶ

課題 Fragmentから親ActivityのonActivityResultを呼びたい。どうすればよいか。 対応 昔の実装見たら解決済みだったのだけど、あれ、どうやるんだっけ?となったのでメモ。 onActivityResultをpublicでoverrideする onActivityResultはprotectedで定義され…

Play Install Referrerをアップデートすると追加のパーミッションが要求されることがある

追記 この問題はInstall Referrerの 1.1.2 で解消されたらしい。まだ未確認だけどもう上げても大丈夫そう。 stackoverflow.com 課題 アプリをリリースしようとしたところ、 READ_PHONE_STATE が追加パーミッションとして要求されますと警告が出た。 原因 Pla…