iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

Kotlin

【Android】グリッドレイアウトのスペースを均等にする

### 結論 まずはItemDecorationのサブクラスを作成。getItemOffsetsメソッドで、それぞれのItemのオフセットをポジションなどによって調整します。 class GridSpacingItemDecoration( private val spanCount: Int, private val spacing: Int, private val in…

【Android】iOSのUICollectionViewみたいなレイアウトを作りたい

iOSのUICollectionViewのようなグリッドレイアウトをAndroidでどのように作るのか分からなかったので簡単にメモを‍♀️ 結論 RecyclerViewを使って、グリッドレイアウトを構築できるようです。 ということで、早速使ってみます。 まずは、Fragment内にRecycler…

【RxKotlin】ストリームでError発生時に処理を実行する

結論 RxKotlinの場合はdoOnErro()オペレータを使って、ストリームにErrorが流れた時をトリガーに処理を実行することができます。下記の例では、Firebase上でユーザを作成する際に、Errorハンドリングとして、AuthのcurrentUserを削除するようにしています。 …

【Kotlin】複数の型を返したい

〇〇の処理をした時に、AとBの異なる型の値を返したい!という時ありますよね。Swiftでは下記のように、シンプルにタプルで返せば良かったのですが、Kotlinではこの書き方ができなかったのでメモしておきます‍♀️ func hoge() -> (Int, String) { return (1, …

【Kotlin】引数ごとにdata classのコンストラクターを使い分けたい

結論 Kotlinでは下記のように、constructor()キーワードを使うことで、セカンダリーコンストラクターとして、引数に応じてClassを初期化することができるようです。Swiftでは、init()で初期化方法を分けることができましたよね override var instagram: Stri…

【Android】Firestoreでバッチ書き込みを行う

本日は、Firestoreの不可分操作の一つである、バッチ書き込みを使ってみたいと思います‍♀️ 不可分操作(アトミックオペレーション)は、複数の操作を一つの操作として扱うことで、全ての操作が成功、又は失敗するように処理を行うことを指します。Firestoreで…

【Kotlin】Unitとは

Unitとは? Javaのvoidに対応する、Kotlinのオブジェクトのようです。 The type with only one value: the Unit object. This type corresponds to the void type in Java. つまり、下記のような戻り値のない関数などは、Kotlinではvoidではなく、Unitが返さ…

【Kotlin】複数の変数をアンラップする

結論 Swiftだとguardがあるので、下記のようにオプショナル値をアンラップできます。 guard let a = optionalA, let b = optionalB, let c = optionalC else { return } Kotlinの場合は、下記のようなメソッドを作ることで、Swiftのguard let else的なことを…

KotlinでとりあえずUnitTest

今回はとりあえずKotlinでUnitTestをするための爆速記事です。 結論 とりあえず、UnitTestを行うために下記をGradleファイルに追加します。 testImplementation 'junit:junit:4.12' testImplementation 'androidx.test:core:1.0.0' testImplementation 'org.…

【Firebase Authentication】KotlinでSignIn・SignUp

Android・Kotlinで、Firebase Authenticationを使った、メールアドレスによるSignIn・SignUpの実装をしたので、簡単に手順をまとめてみたいと思います‍♀️ やっていく まずはFirebase Authentication Androidライブラリを、アプリレベルのGradleファイルに記…

【Kotlin】data classでinterfaceに準拠する

Kotlinのdata classでinterfaceに準拠する際の書き方をメモ 結論 data classのイニシャライザに、Sportのインターフェースを含める場合には、下記のようにoverrideでプロパティを宣言する必要があるみたいです✍️ interface Sport { var name: String } data …

Kotlinのスマートキャスト

スマートキャストとは? スマートキャストは、型判定とキャストが同時に行われる、Kotlinコンパイラの仕組みのことをいいます。 使い方 Kotlinではis演算子を使うことで、下記のようにスマートキャストが行われます。 fun demo(x: Any) { if (x is String) {…

KotlinでもSwiftのif let else的なことをしたい

結論 普通にオプショナル値をアンラップしたい場合は、以前の記事でも紹介したように、let { }を使います。 val num: Int? = null num?.let { println(it) } アンラップできた場合とできなかった場合で処理を分岐をする場合は、下記のようにalsoとrunを使っ…

KotlinにもResultがあった

Swift同様に、KotlinにもResult型があったので、簡単に使い方をまとめてみます👷‍♀️ とりあえず使う とりあえず、成功した場合と失敗した場合のハンドリングしたい場合はこんな感じで、Swiftよりもスマートに書ける印象。 val result: Result<Int> = Result.success</int>…

Kotlinの三項演算子

Kotlinでも普通に三項演算子が使えると思ってたら、使えないみたいなので簡単にメモを残しておきます‍♀️ val max = (a > b) ? a : b // 三項演算子の代わりに、普通にIf式を使うとそれっぽくかけるらしいです。 val max = if (a > b) a else b // // ... i…

【Android】TextInputLayoutにローディングを表示したい

結論 下記のようにContextにExtensionを生やして、システムデフォルトのローディングインジケーターを取得することができます。drawableの生成だけだと、アニメーション化されないため、(drawable as? Animatable)?.start()でアニメーションを開始させていま…

【Kotlin】Kotlin でちょろっと正規表現を行う

今回はタイトルの通り、Kotlin でちょろっと正規表現を行ったのでそのメモです。 結論 Kotlin ではこんな感じで行える見たいですね。正規表現を """ で囲むことで、エスケープが必要にならないのでシンプルに記述することができます。 val pattern = """"^[A…

【Android】ReactiveX の恩恵を受けたスレッド管理を学ぶ

RxKotlin で実行する Observable のスレッドをどのように切り替えるのか調査したので、調べた内容を簡単にまとめておこうかと思います それではやっていく まずは、Android プラットフォーム上のメインスレッドで処理を実行できるようにしてみます。Android …

【Android】Cannot inline bytecode built with JVM target 1.8 into bytecode that is being built with JVM target 1.6. 対処法

Text の変更を取得しようと下記のよう、Listener を追加すると謎のエラーが発生しました。 binding.accountNameInputTextField.addTextChangedListener { println(it.toString()) } // Cannot inline bytecode built with JVM target 1.8 into bytecode that…

【Kotlin】Koin で DI してみた

絶賛個人開発中のアプリで Clean Architecture を採用していて、DI(Dependency Injection) Framework の Koin を使う機会があったので、その使用方法をメモ程度に残しておきたいと思います‍♂️ github.com それではやっていく まずは、App レベルの build.gra…

【Android】View の Background をアニメーションさせる

本日はタイトルの通り、Android で View の background リソースをアニメーションさせながら変更する方法を紹介したいと思います‍ それではやっていく まずは、アニメーションの初期状態の drawable とアニメーション後の drawable をそれぞれ定義しておきま…

【Android】カスタムビューのカスタム属性を設定する

今回は、以前の「カスタムビューの作成」に引き続き、カスタムビューでカスタム属性を追加・適用する方法をメモ程度に残しておきます‍♀️ それではやっていく まずは、カスタム属性を定義するための xml を res/values 配下に attrs_account_type_select.xml …

【Android】Kotlin + XML で View のコンポーネント作成

本日はタイトルの通り、Kotlin + XML で View のコンポーネントを作成する方法を紹介したいと思います。iOS だと Swift + xib で作るカスタムビューみたいな感じのやつです‍♀️ それではやっていく まずは、view_account_type_select という名前でレイアウト…

【Kotlin】Kotlin でアンラップ

Kotlin でのアンラップの仕方をメモしておきます。 結論 こんな感じで、Swiftの if let っぽくアンラップできる。 var name: String? = "" name?.let { println(it) } また、null合体演算子と組み合わせることで、デフォルト値と合わせてシンプルに値を取り…

【Kotlin】Fragment のイベントを Activity で受け取る

本日も初歩的な内容ですが、Fragment のイベントを Activity で受け取る実装を行ったので、その方法をメモ程度に残しておきます‍♂️ それではやっていく Fragment 側の実装は下記のようになります。重要な部分は OnboardSignUpTermsOfServiceListener に関す…

【Android】android.content.ActivityNotFoundException の対処法

MainActivity から異なるパッケージにある OnboardActivity に Intent を使用して画面遷移しようとしたところ下記のような Error に遭遇していました E/AndroidRuntime: FATAL EXCEPTION: main Process: YamatoOtaka.Fidee.debug, PID: 30741 java.lang.Run…

【Kotlin】java.util.NoSuchElementException: List is empty

先日、Kotlin で Firestore を用いて Collection を取得していると下記のような Error に遭遇しました 2020-12-13 11:42:44.547 22551-22551/com.YamatoOtaka.androidsample1 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.YamatoOtaka.androidsamp…

【Kotlin】Android Realm でデータを保存して確認するまで

今回は、Kotlin を使って Realm にデータを保存。そして、Realm Studio で保存したデータ確認するまでの手順を紹介したいと思います‍♀️ それではやっていく 1.プロジェクトレベルの Gradle に下記を追加します。執筆時点では、10.0.1 が最新版でしたがアップ…

【Kotlin】Activity の画面遷移時にカスタムデータを渡す

今回はタイトルの通り、Kotlin で Activity の画面遷移時にカスタムデータを渡す方法を紹介したいと思います‍ それではやっていく‍ まずは遷移先の Activity に渡すデータクラスを定義し、Serializable に準拠させます。 data class PlaceItemEntity(val nam…

【Kotlin】アプリにToolbarをつける

今回は、Android アプリの ActionBar を非表示にし、代わりに Toolbar をつける方法を紹介したいと思います‍ まずは、ActionBar と Toolbar の違いをみていきましょう。 ActionBar ActionBar は、画面上部に位置するバーで、画面のタイトルや重要なアクショ…