これはviewクラスを描けば、自動で?activity_main.xmlに表示されるという認識でいいのでしょうか?
違います。
と言っても、ソースコードを追っても追いきれなかったので確証はありませんが。
java
1 setContentView(R.layout.activity_main);
は、
java
1 View view = LayoutInflater.from(this).inflate(R.layout.activity_main, null);
2 setContentView(view);
と書き換えることができます。
「View
を指定するとレイアウトになにかする」のではなくて、「レイアウトを指定するとView
を作成してsetContentView
を呼び出す」と考える方が自然だと思います。
てことは、thisってのがレイアウトを指定(「この」画面)という理解でいいのでしょうか?
違います。
というか、それは質問とは関係のない話です。
先のコードは一部のみ書きましたが、Activityのソースまるまるを、ついでに上記の部分もくどく書くと以下のようになります。
java
1package com.example.sample;
2
3import android.app.Activity;
4import android.os.Bundle;
5import android.view.View;
6import android.view.LayoutInflater;
7
8public class MainAcitvity extends Activity {
9 @Override
10 protected void onCreate(Bundle savedInstanceState)
11 {
12 super.onCreate(savedInstanceState);
13 // LayoutInflater inflater = getLayoutInflater();
14 LayoutInflater inflater = LayoutInflater.from(this);
15 View view = inflater.inflate(R.layout.activity_main, null);
16 setContentView(view);
17 }
18}
(最近kotlinばっか書いていてjavaは久しいので、間違いがあったらごめんなさい)
レイアウトIDからViewを作成するには、LayoutInflater#inflate
メソッドを呼び出す必要があります。
LayoutInflater#inflate
メソッドを呼び出すには、LayoutInflater
クラスのインスタンスが必要です。
LayoutInflater
クラスのインスタンスを取得するには、Activity#getLayoutInflater
メソッドか、LayoutInflater#from
メソッドのいずれかを呼び出す必要があります。
先の例ではLayoutInflater#from
メソッドを呼び出したのですが、引数にContext
クラスのインスタンスが必要になります。
Activity
クラスはContext
クラスを継承しているので、Activity
クラスのインスタンスでも問題ないわけで、Activity
クラスのメソッド内であるのでthis
(つまり自分自身のインスタンス)を渡したわけです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/14 13:00
2021/01/14 13:39
2021/01/14 13:58