ラベル Kotlin の投稿を表示しています。 すべての投稿を表示
ラベル Kotlin の投稿を表示しています。 すべての投稿を表示

2022年2月2日水曜日

ViewBindingで配置できるViewの上限は253個まで

 ViewBindingを使ってAndroid開発をしているとき、

大量にViewを作るとBindingでエラーなることがあった。


2021年10月26日火曜日

Firebaseのメールリンクでログインしてみる

 AndroidアプリでFirebaseを使ったメールリンク認証を作る際、
躓いたのでまとめておきます。


メールリンク認証とは

メールアドレスのみで認証する、パスワード設定が不要な認証方法です。

手順は
  1. アプリのユーザ登録画面からメールアドレスを入力してもらう
  2. Firebaseからそのメールアドレスに招待メールが送られる
  3. メールの招待RULをクリックすると、アプリが起動し認証完了(ユーザ登録完了)

メールを受け取れるということは本人である証明。というセキュリティの考え方。

2021年8月29日日曜日

「Redundant SAM - constructor」になった時の対処法

 Android開発をKotlin言語でしていると、ボタン押下などのリスナー設定をしているときに
「Redundant SAM - constructor」が出ることがあるので、意味と対処法を残しておく。
まぁ、
カーソルを合わせたときに出る「Remove redundant SAM - constructor」を押すか、Alt+Shift+Enterキーの同時押しをすれば、意味を理解していなくても自動でコードを修正してくれますけどね..


2021年8月22日日曜日

Activityの遷移時、すでに生成しているActivityへ遷移する方法

startActivityでActivityを切り替える場合、
デフォルトのままだと、毎回新規でActivityのインスタンスを作ってしまう。
なので、すでに同名Activityが存在していても、新しいActivityがスタック上にできあがる。


Intentで指定したActivityがすでに生成されている場合は、
生成済みActivityに遷移させるにはどうするか。について書いていく。

2021年8月11日水曜日

Ktolinで「Parameter 'xxx' is never used」というワーニングが出たときの対応

KtolinでAndroid開発をしているとき、 
ListViewなど押下イベント設定(setOnItemClickListener)をラムダで書くと以下のようになる。
// 押下したリストのアイテム情報をトースト表示する
listView.setOnItemClickListener { parent, view, position, id ->
    Toast.makeText(this, array[position], Toast.LENGTH_SHORT).show()
}
こうすると、
パラメータ4つあるけど positionしか使っておらず、残りの引数に波線が表示される。


ワーニングメッセージを見るとそれぞれ
Parameter 'parent' is never used, could be renamed to _
Parameter 'view' is never used, could be renamed to _
Parameter 'id' is never used, could be renamed to _

となっている。

2021年6月15日火曜日

AndroidStudio4.2でKotlinで新規プロジェクト作成するとエラーになる

以前にも紹介したが、また同類のエラーが発生したので備忘録
新規プロジェクトをKotlinで作成すると、以下のエラーが出てビルドできなくなった。
A problem occurred configuring root project 'My Application'.
> Could not resolve all artifacts for configuration ':classpath'.
   > Could not find org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.10-release-894.
     Searched in the following locations:
       - https://dl.google.com/dl/android/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.5.10-release-894/kotlin-gradle-plugin-1.5.10-release-894.pom
       - https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.5.10-release-894/kotlin-gradle-plugin-1.5.10-release-894.pom
     Required by:
         project :

Possible solution:
 - Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html

どうやらkotlinのプラグイン「1.5.10-release-894」が見つからないらしい。。

2021年6月9日水曜日

KotlinでListの参照は[]を使うべきかgetを使うべきか

KotlinでListの参照を行うには以下二種類の方法が存在する
  • []のインデックス演算子で指定する方法
  • get()のメソッドで指定する方法

どちらを使うのが適切なのか調べてみると
言語仕様で[]を使う参照は、getに置き換えてくれてるようだ。

わざわざ[]で参照をできるように言語仕様側で調整していることになる。
ということは
言語開発者の意図として、[]を使ってほしいということ。

以上から、

Kotlin言語では[]で参照することが正しい

2021年5月11日火曜日

AndroidStudio4.2でKotlinが使えなくなった件

 AndroidStudio4.2がリリースされたのでアップデートしてみたら

新規プロジェクトをKotlinで作成すると、以下のエラーが出てビルドできなくなった。

A problem occurred configuring root project 'My Application'.
> Could not resolve all artifacts for configuration ':classpath'.
   > Could not find org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.0-release-764.
     Searched in the following locations:
       - https://dl.google.com/dl/android/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.5.0-release-764/kotlin-gradle-plugin-1.5.0-release-764.pom
       - https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.5.0-release-764/kotlin-gradle-plugin-1.5.0-release-764.pom
     Required by:
         project :

Possible solution:
 - Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html

どうやらkotlinのプラグイン「1.5.0-release-764」が見つからないらしい。。

2021年3月25日木曜日

ListViewに1件ずつ追加する方法

Androidでのリスト表示はListViewを使用することが多い。
何かを契機に1件ずつレコードを追加していく際によく以下のことが起こる
  • Listには追加できているのに見栄えに反映されない
  • 更新すると表示位置が先頭行に戻ってしまう
なので、
ボタンを押下を契機に一件ずつ要素を追加していき、
表示位置も維持するコードのサンプルを載せておく

2021年3月13日土曜日

SharedPreferences#StringSetの挙動について

 SharedPreferencesでStringSetを用いて追加保存する際、以下が起こることがある
  • 1件しか保存されない
  • 保存してないのに勝手にデータが保存されている

結論を先に書くと、
SharedPreferencesからgetStringSetする際、シャローコピーすれば解決するが
 // java版
 Set<String> set = new HashSet<>(
   getSharedPreferences("set",MODE_PRIVATE).getStringSet("data", new HashSet<>()));

 // Kotlin版
 val set = getSharedPreferences("set", MODE_PRIVATE)
   .getStringSet("data", mutableSetOf())?.toMutableSet()
どういう理屈なのかをもう少し詳しくまとめる。



2021年3月7日日曜日

AndroidでkHttpを使ってみる

 Androidのネットワーク通信で有名な外部ライブラリといえば「OkHttp」「Retrofit」だろう。
なのであえて、「kHttp」というライブラリを使った通信を行ってみた。


kHttpとは

公式はここ
Pythonでスクレイピングをするときに使う「requestsモジュール」をKotlinで使うようにしたもの。Android以外でも使えるHTTPリクエストできるシンプルなライブラリだ。

2021年3月4日木曜日

findViewByIdとrequireViewByIdの違い

Androidでレイアウトファイルに定義したViewのインスタンスを探すのに
findViewByIdを使ったことある人は多いと思う。
ViewのAPI仕様を見てたら、requireViewByIdという似たようなメソッドを発見したので、違いを書き残しておく。

2021年2月26日金曜日

ラジオボタンで選択中の文言を取得する

Androidでラジオボタンを使う際
選択中のラジオボタンの情報がほしくなることがある。
方法として
  • 公式通り、各ラジオボタンのクリック処理を実装し、 押されたタイミングで情報をローカル変数に保持しておく
  • 各ラジオボタンにisChecked()を実行していき、チェックONのラジオボタンを探す
  • RadioGroupのOnCheckedChangeListenerで変化を監視
どれもローカル変数を用意したり、全Viewチェックしたりで効率的でない。
今回はRadioGroupのAPI仕様を見てたら、丁度良さそうなのがあったので紹介。


2021年2月23日火曜日

AndroidでLatex(数式)を扱う方法

 Androidの標準機能では数式を扱うことはできないので、外部ライブラリを探してみた。
Latexで数式が書けるライブラリを発見したので、使い方まとめ

2021年2月21日日曜日

SharedPreferencesで日時保存と取り出し方

Android開発で、SharedPreferencesを用いて日時を保存して、
取り出す際に日付型で取得する方法のまとめ。

日付を扱うクラスはDate、Calendar、LocalDate、LocalDateTime、LocalTimeがよくあるかな
と思うのでこの辺をまとめてみます。

2021年2月18日木曜日

app/build.gradleのプラグインの構文が変わっていた

Kotlin Android Extensionsを入れようとしたら、
app/build.gradleのプラグインの構文が変わっていたので備忘録


■ 以前(2020/12/04に作ってたプロジェクトはこっちだった)
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions' // 追加プラグイン


■ 今(2020/12/13以降に作ってたプロジェクトはこっちだった)
plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-android-extensions' // 追加プラグイン
}

2021年2月16日火曜日

Viewの表示非表示状態を保存する

AndroidでTextViewなどのViewの表示切替を行った後、次回のアプリ起動でそのView表示可否状態を維持したいときの保存はSharedPreferencesが便利です。