1. morayl

    No comment

    morayl
Changes in body
Source | HTML | Preview
@@ -1,66 +1,66 @@
# はじめに
DatabindingしたViewModelから、クリックイベントなどをLiveDataでFragmentに通知するとき、privateなMutableLiveDataとpublicなLiveDataを作るの面倒だな〜と思ったことはありませんか??
私はあります!!
```kotlin
class SampleViewModel : ViewModel() {
private val _sampleButtonClick = MutableLiveData<Unit>()
val sampleButtonClick: LiveData<Unit> = _sampleButtonClick
}
```
今回は、AndroidStudioのLiveTemplateを使うことにより簡単に書けることに気づいたのでそれを紹介します!
私は今までLiveTemplateは使うことはありつつ作ったことはなかったのですが、作るのもとても簡単でした!
# LiveTemplateとは?
> ライブ テンプレートにコード スニペットを入力し、コードの小さなチャンクをすばやく挿入して補完できます。ライブ テンプレートを挿入するには、テンプレートの短縮名を入力して Tab キーを押します。そうすると、テンプレートに関連付けられたコード スニペットがコードに挿入されます。
たとえば、短縮名 newInstance を入力して Tab キーを押すと、新しいフラグメント インスタンスのコードが引数プレースホルダとともに挿入されます。 また、fbc と入力すると、findViewById() メソッドがキャストおよびリソース ID 構文とともに挿入されます。
(AndroidDeveloperの[コード生産性ページ](https://developer.android.com/studio/write?hl=ja#create_custom_code-completion_templates)より)
ToastやnewInstance、java時代にはpsfsやpsfiにお世話になった人もいるのではないでしょうか。
# 実際の動き
変数名とクラスを入れるだけ!
![livetemplate2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192408/914285e5-2e41-1f41-dbd2-a94659e0a8df.gif)
# 作り方
AndroidStudioのPreferencesから作ることができます。
AndroidStudio > Preferences > Editor > Live Templates
![Screenshot at Aug 13 13-40-36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192408/41e9d12f-a0b1-5330-4366-94a4bb5b427f.png)
今回はKotlinファイルに対して追加するので、AndroidKotlinを選択して、+ボタンで追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192408/d44a5458-b369-fdde-0675-32ef2c8fb3b6.png)
下部のボックス呼び出し名や中身を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192408/d774e1ca-3d6e-bcbb-cc35-60a57561f0d3.png)
* Abbreviation
* これが呼び出し名
* Description
* 説明(なくてもOK。Preferencesで呼び出し名の右側に表示される)
* Template text
* 本体
* 変数は$$で囲むことで追加できます。
* 画像から分かると思いますが、クラス名はフルパスで書きます。<br>
実行時にimportしてくれます。(書かないと自分でimportしなきゃいけないので注意)
* Reformat according to style
* これにチェックを入れると、使用時にフォーマットを掛けてくれるのでオススメ
* Applicatable in Kotlin:
* 適用する(補完が出てくる)箇所。これを指定しないと、LiveTemplateが出てきません。
* 今回の`livedata`はclassのフィールドで利用するので、`class`を選択しました。<br>
他にもTop-levelやCommentもあったりします。
```kotlin:コピペ用
private val _$name$ = androidx.lifecycle.MutableLiveData<$clazz$>()
val $name$: androidx.lifecycle.LiveData<$clazz$> = _$name$
```
すでにあるテンプレートの中も見られるので、参考になってとても助かりました。
# おわりに
ViewModelからFragmentにクリックイベントをLiveDataで伝える場合は、消費できる[Eventクラス(I/Oのソース)](https://github.com/google/iosched/blob/master/shared/src/main/java/com/google/samples/apps/iosched/shared/result/Event.kt)を使っている人も多いかもしれません。
-私はeventlivedataというテンプレートも作っています。
+私はeventLiveDataというテンプレートも作っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192408/75f64fa5-3d44-2f4c-6836-574cd7f23a0a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192408/f6c80cdc-c3b9-d4e5-4824-66ad92ed8735.png)
何度も書いてるな・・・と思うコードがあれば、気軽にテンプレートに追加していくと良さそうです!