10
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ankoでのid設定

Last updated at Posted at 2018-01-15

目的

Ankoでidを設定する方法をまとめる

背景

JavaでAndroidアプリ開発中のレイアウト作成にXMLを用いている場合が多いと思います。
しかし、Kotlinで開発する場合はAnkoというUI構築のためのDSLが使えます。
ちなみに、このAnkoはJetbrains製です。
そしてこのAnkoを使う際にXMLのようにidを設定してコードでfindしたりsetOnClickListenerしたりすると思います。
(AnkoでonClickの処理とかも書けますが...)
でも何も考えずAnkoでXMLのようにidを設定しようとするとエラーが吐かれます。
XMLのように新しくidを追加するときに一工夫必要。
そしてAnkoのid設定について書かれている記事があまりなかった(特に日本語)のでここにまとめようと思いました。

(何もしない状態での)現実

image.png

エラー吐かれまくり(´・ω・`)

(この記事に書いてあることをした)現実

image.png

やった(´・ω・`)

確認環境

  • AndroidStudio 3.1 Canary 8
  • Kotlin 1.2.10
  • Anko 0.10.3
  • macOS High Sierra 10.13.2

古すぎたりしなければバージョンの違いは特に関係ないと思います。

設定方法

方法は3つくらいあります。

設定方法1:idを設定しない

idを設定しなければidの設定で困ることはないという極論

ごめんなさい、何も解決していません。

設定方法2:idに任意の数値をセットする

そもそもこのidがIntを求めているのでそのままInt型の任意の数値を渡せてあげれば動きます。

だからAndroidアプリを開発する際に、
1はActivity1のEditTextで、2はActivity2のEditTextで...みたいな感じでどこかにメモを残しておきながらやるとなんとかなります。
実際にやるときは10はEditTextで20はButtonでみたいな感じで分けると分かりやすくなりそうです。

でもこんな方法、、、僕は嫌だ!

設定方法3:values/ids.xmlを用意してidの名前を登録する

この方法が一番理想的だと思います。
Androidビューでプロジェクトを見たときにres/values下に「New」→「Values resource file」で名前をids.xmlにして作成します。
そこに下記のように設定することで新規idを追加できます。
type="id"は固定でname=""の部分に任意の文字列をセットすればその名前のidを生成できます。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="Hoge" type="id"/>
</resources>

これでAnkoでid追加をするときに R.id.Hoge とすることで呼び出せるようになります。
補完もちゃんと出ます。
image.png

最後に

この方法が見つからなくて一時期Anko使わないでおこうと思ったくらいなので、Ankoを諦めていたけどこの記事を見てもう一度やってみようと思ってくれる人が一人でもいれば幸いです。
他にもこんな方法がある等あれば教えて欲しいです!
Kotlin楽しい。

参考元

10
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?