質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

2回答

1983閲覧

Button型のローカル変数をonClickListenerでアンラップする方法

harumi

総合スコア407

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2018/10/22 09:08

編集2018/10/23 00:07

新しいプロジェクトにKotlinで挑戦しようとしたのですが、初歩の初歩でつまづいてしまったので質問させてください。

[Android & Kotlin] Buttonアプリを作ってみるとJavaよりシンプルだった
この記事を参考にボタンを追加してみました。

記事と違うところはButton型の変数をローカル変数にしたことです。

setOnClickListenerにエラーが出てしまったので、btnをアンラップをしたつもりなんですが、アンラップができていない?ようで、setOnClickListenerを呼び出す部分で強制的にアンラップしないとエラーがで続けてしまいました。
**btn?.let {}**ここでアンラップはできていないんでしょうか?

Kotlin

1class MainActivity : AppCompatActivity() { 2 3 var btn:Button? = null 4 override fun onCreate(savedInstanceState: Bundle?) { 5 super.onCreate(savedInstanceState) 6 setContentView(R.layout.activity_main) 7 btn = findViewById(R.id.btn); 8 btn?.let { 9 btn!!.setOnClickListener { 10 Log.d("test", "test") 11 } 12 } 13 } 14}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Smart Castによるアンラップをしたいのであれば、if文でnullチェックを行えばOKです。

kotlin

1if (btn != null) { 2 btn.setOnClickListener { 3 Log.d("test", "test") 4 } 5}

投稿2018/10/23 05:58

kakajika

総合スコア3131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

変数btnは関数外宣言していますから(質問には「ローカル変数」と書かれていますが、示されたコードではローカル変数になっていません)、スコープはクラス内全体になります。そうすると、letを呼んだからといって、変数btnがnull許容型からnull非許容型に変化するわけではないということでしょう。

kotlin

1 btn?.let { it -> 2 it.setOnClickListener { 3 Log.d("test", "test") 4 } 5 }

のように記述することになるんじゃないでしょうか。


(10/24 12:30)
解決済みになっているのですが、自分でも目を疑う回答になっていたので、修正しています。書いたつもりのことが全然書けていないし。申し訳ありません。

投稿2018/10/23 05:40

編集2018/10/24 03:34
keicha_hrs

総合スコア6768

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問