回答編集履歴

1

コメントに対する回答

2021/01/14 13:38

投稿

katsuko
katsuko

スコア3538

test CHANGED
@@ -33,3 +33,81 @@
33
33
  と書き換えることができます。
34
34
 
35
35
  「`View`を指定するとレイアウトになにかする」のではなくて、「レイアウトを指定すると`View`を作成して`setContentView`を呼び出す」と考える方が自然だと思います。
36
+
37
+
38
+
39
+ ---
40
+
41
+
42
+
43
+ > てことは、thisってのがレイアウトを指定(「この」画面)という理解でいいのでしょうか?
44
+
45
+
46
+
47
+ 違います。
48
+
49
+ というか、それは質問とは関係のない話です。
50
+
51
+
52
+
53
+ 先のコードは一部のみ書きましたが、Activityのソースまるまるを、ついでに上記の部分もくどく書くと以下のようになります。
54
+
55
+
56
+
57
+ ```java
58
+
59
+ package com.example.sample;
60
+
61
+
62
+
63
+ import android.app.Activity;
64
+
65
+ import android.os.Bundle;
66
+
67
+ import android.view.View;
68
+
69
+ import android.view.LayoutInflater;
70
+
71
+
72
+
73
+ public class MainAcitvity extends Activity {
74
+
75
+ @Override
76
+
77
+ protected void onCreate(Bundle savedInstanceState)
78
+
79
+ {
80
+
81
+ super.onCreate(savedInstanceState);
82
+
83
+ // LayoutInflater inflater = getLayoutInflater();
84
+
85
+ LayoutInflater inflater = LayoutInflater.from(this);
86
+
87
+ View view = inflater.inflate(R.layout.activity_main, null);
88
+
89
+ setContentView(view);
90
+
91
+ }
92
+
93
+ }
94
+
95
+ ```
96
+
97
+
98
+
99
+ (最近kotlinばっか書いていてjavaは久しいので、間違いがあったらごめんなさい)
100
+
101
+
102
+
103
+ レイアウトIDからViewを作成するには、`LayoutInflater#inflate`メソッドを呼び出す必要があります。
104
+
105
+ `LayoutInflater#inflate`メソッドを呼び出すには、`LayoutInflater`クラスのインスタンスが必要です。
106
+
107
+ `LayoutInflater`クラスのインスタンスを取得するには、`Activity#getLayoutInflater`メソッドか、`LayoutInflater#from`メソッドのいずれかを呼び出す必要があります。
108
+
109
+
110
+
111
+ 先の例では`LayoutInflater#from`メソッドを呼び出したのですが、引数に`Context`クラスのインスタンスが必要になります。
112
+
113
+ `Activity`クラスは`Context`クラスを継承しているので、`Activity`クラスのインスタンスでも問題ないわけで、`Activity`クラスのメソッド内であるので`this`(つまり自分自身のインスタンス)を渡したわけです。