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

回答編集履歴

1

コメントに対する回答

2021/01/14 13:38

投稿

katsuko
katsuko

スコア3601

answer CHANGED
@@ -15,4 +15,43 @@
15
15
  ```
16
16
 
17
17
  と書き換えることができます。
18
- 「`View`を指定するとレイアウトになにかする」のではなくて、「レイアウトを指定すると`View`を作成して`setContentView`を呼び出す」と考える方が自然だと思います。
18
+ 「`View`を指定するとレイアウトになにかする」のではなくて、「レイアウトを指定すると`View`を作成して`setContentView`を呼び出す」と考える方が自然だと思います。
19
+
20
+ ---
21
+
22
+ > てことは、thisってのがレイアウトを指定(「この」画面)という理解でいいのでしょうか?
23
+
24
+ 違います。
25
+ というか、それは質問とは関係のない話です。
26
+
27
+ 先のコードは一部のみ書きましたが、Activityのソースまるまるを、ついでに上記の部分もくどく書くと以下のようになります。
28
+
29
+ ```java
30
+ package com.example.sample;
31
+
32
+ import android.app.Activity;
33
+ import android.os.Bundle;
34
+ import android.view.View;
35
+ import android.view.LayoutInflater;
36
+
37
+ public class MainAcitvity extends Activity {
38
+ @Override
39
+ protected void onCreate(Bundle savedInstanceState)
40
+ {
41
+ super.onCreate(savedInstanceState);
42
+ // LayoutInflater inflater = getLayoutInflater();
43
+ LayoutInflater inflater = LayoutInflater.from(this);
44
+ View view = inflater.inflate(R.layout.activity_main, null);
45
+ setContentView(view);
46
+ }
47
+ }
48
+ ```
49
+
50
+ (最近kotlinばっか書いていてjavaは久しいので、間違いがあったらごめんなさい)
51
+
52
+ レイアウトIDからViewを作成するには、`LayoutInflater#inflate`メソッドを呼び出す必要があります。
53
+ `LayoutInflater#inflate`メソッドを呼び出すには、`LayoutInflater`クラスのインスタンスが必要です。
54
+ `LayoutInflater`クラスのインスタンスを取得するには、`Activity#getLayoutInflater`メソッドか、`LayoutInflater#from`メソッドのいずれかを呼び出す必要があります。
55
+
56
+ 先の例では`LayoutInflater#from`メソッドを呼び出したのですが、引数に`Context`クラスのインスタンスが必要になります。
57
+ `Activity`クラスは`Context`クラスを継承しているので、`Activity`クラスのインスタンスでも問題ないわけで、`Activity`クラスのメソッド内であるので`this`(つまり自分自身のインスタンス)を渡したわけです。