回答編集履歴

1

追記

2021/03/30 04:51

投稿

hoshi-takanori
hoshi-takanori

スコア7895

test CHANGED
@@ -3,3 +3,95 @@
3
3
  すでに対応されているように findViewById するか、view binding をお使いください。
4
4
 
5
5
  参考: [Kotlin Android Extensions syntheticsのdeprecatedに伴う対応 - Qiita](https://qiita.com/taigen/items/116ff3856eab6634e47b)
6
+
7
+
8
+
9
+ ---
10
+
11
+
12
+
13
+ view binding の使い方ですが、まず app/build.gradle の android { 〜 } の中に次を追加します。
14
+
15
+
16
+
17
+ ```
18
+
19
+ android {
20
+
21
+ // 追加
22
+
23
+ viewBinding {
24
+
25
+ enabled = true
26
+
27
+ }
28
+
29
+ }
30
+
31
+ ```
32
+
33
+
34
+
35
+ あとは次のようにソースを修正。
36
+
37
+
38
+
39
+ - import 文を変更。ActivityMainBinding は activity_main.xml から自動生成されます。
40
+
41
+ - [lateinit](https://maku77.github.io/kotlin/basic/lateinit.html) なプロパティを追加、onCreate で初期化して binding.root を setContentView する。
42
+
43
+ - layout xml の中で android:id を指定したものは `binding.指定したid` で参照できる。
44
+
45
+
46
+
47
+
48
+
49
+ ```diff
50
+
51
+ import androidx.appcompat.app.AppCompatActivity
52
+
53
+ import android.os.Bundle
54
+
55
+ -import kotlinx.android.synthetic.main.activity_main.*
56
+
57
+ +import com.example.myapplication.databinding.ActivityMainBinding
58
+
59
+
60
+
61
+ class MainActivity : AppCompatActivity() {
62
+
63
+ + private lateinit var binding: ActivityMainBinding
64
+
65
+
66
+
67
+ override fun onCreate(savedInstanceState: Bundle?) {
68
+
69
+ super.onCreate(savedInstanceState)
70
+
71
+ - setContentView(R.layout.activity_main)
72
+
73
+ + binding = ActivityMainBinding.inflate(layoutInflater)
74
+
75
+ + setContentView(binding.root)
76
+
77
+
78
+
79
+ - button.setOnClickListener{
80
+
81
+ - textView.text = "こんにちは"
82
+
83
+ + binding.button.setOnClickListener{
84
+
85
+ + binding.textView.text = "こんにちは"
86
+
87
+ }
88
+
89
+ }
90
+
91
+ }
92
+
93
+ ```
94
+
95
+
96
+
97
+ 参考: [ビュー バインディング | Android デベロッパー | Android Developers](https://developer.android.com/topic/libraries/view-binding?hl=ja)