質問するログイン新規登録

回答編集履歴

1

追記

2021/03/30 04:51

投稿

hoshi-takanori
hoshi-takanori

スコア7903

answer CHANGED
@@ -1,3 +1,49 @@
1
1
  それは synthetic import という機能でしたが、残念ながら最近廃止になってしまいました。
2
2
  すでに対応されているように findViewById するか、view binding をお使いください。
3
- 参考: [Kotlin Android Extensions syntheticsのdeprecatedに伴う対応 - Qiita](https://qiita.com/taigen/items/116ff3856eab6634e47b)
3
+ 参考: [Kotlin Android Extensions syntheticsのdeprecatedに伴う対応 - Qiita](https://qiita.com/taigen/items/116ff3856eab6634e47b)
4
+
5
+ ---
6
+
7
+ view binding の使い方ですが、まず app/build.gradle の android { 〜 } の中に次を追加します。
8
+
9
+ ```
10
+ android {
11
+ // 追加
12
+ viewBinding {
13
+ enabled = true
14
+ }
15
+ }
16
+ ```
17
+
18
+ あとは次のようにソースを修正。
19
+
20
+ - import 文を変更。ActivityMainBinding は activity_main.xml から自動生成されます。
21
+ - [lateinit](https://maku77.github.io/kotlin/basic/lateinit.html) なプロパティを追加、onCreate で初期化して binding.root を setContentView する。
22
+ - layout xml の中で android:id を指定したものは `binding.指定したid` で参照できる。
23
+
24
+
25
+ ```diff
26
+ import androidx.appcompat.app.AppCompatActivity
27
+ import android.os.Bundle
28
+ -import kotlinx.android.synthetic.main.activity_main.*
29
+ +import com.example.myapplication.databinding.ActivityMainBinding
30
+
31
+ class MainActivity : AppCompatActivity() {
32
+ + private lateinit var binding: ActivityMainBinding
33
+
34
+ override fun onCreate(savedInstanceState: Bundle?) {
35
+ super.onCreate(savedInstanceState)
36
+ - setContentView(R.layout.activity_main)
37
+ + binding = ActivityMainBinding.inflate(layoutInflater)
38
+ + setContentView(binding.root)
39
+
40
+ - button.setOnClickListener{
41
+ - textView.text = "こんにちは"
42
+ + binding.button.setOnClickListener{
43
+ + binding.textView.text = "こんにちは"
44
+ }
45
+ }
46
+ }
47
+ ```
48
+
49
+ 参考: [ビュー バインディング | Android デベロッパー | Android Developers](https://developer.android.com/topic/libraries/view-binding?hl=ja)