回答編集履歴

2

書きました。

2020/07/05 05:10

投稿

hoshi-takanori
hoshi-takanori

スコア7895

test CHANGED
@@ -1 +1,135 @@
1
+ まず、button.setOnClickListener の引数 `new View.OnClickListener() { 〜 }` は匿名クラスというやつで、button が押された時に onClick メソッドが実行されます。つまり、button が押されるまで dynamic.xml は読み込まれず、button2 や textView は存在しません。
2
+
3
+
4
+
5
+ ```java
6
+
7
+ button.setOnClickListener(new View.OnClickListener() {
8
+
9
+ @Override
10
+
11
+ public void onClick(View view) {
12
+
13
+ layout.removeAllViews();
14
+
15
+ inflater.inflate(R.layout.dynamic, layout);
16
+
17
+ }
18
+
19
+ });
20
+
21
+ ```
22
+
23
+
24
+
25
+ で、onCreate メソッドの中身ですが、実際に onCreate が呼ばれた時に実行される内容は、ボタンが押された時の処理を 〜 で省略すると、
26
+
27
+
28
+
29
+ ```java
30
+
31
+ public class MainActivity extends AppCompatActivity {
32
+
33
+
34
+
35
+ @Override
36
+
37
+ protected void onCreate(Bundle savedInstanceState) {
38
+
39
+ super.onCreate(savedInstanceState);
40
+
41
+ setContentView(R.layout.activity_main);
42
+
43
+
44
+
45
+ final LayoutInflater inflater = (LayoutInflater)getLayoutInflater();
46
+
47
+ final ConstraintLayout layout = (ConstraintLayout)findViewById(R.id.testDynamic);
48
+
49
+ Button button = findViewById(R.id.button);
50
+
51
+ button.setOnClickListener(new View.OnClickListener() { 〜 });
52
+
53
+
54
+
55
+ Button button2 = findViewById(R.id.button2);
56
+
57
+ final TextView textView = findViewById(R.id.textView);
58
+
59
+ button2.setOnClickListener(new View.OnClickListener() { 〜 });
60
+
61
+ }
62
+
63
+ }
64
+
65
+ ```
66
+
67
+
68
+
69
+ となります。つまり、まだ生成されてない button2 や textView にアクセスしようとしてエラーになってます。
70
+
71
+
72
+
73
+ 修正方法ですが、button2 や textView へのアクセスは dynamic.xml を読み込んだ後、つまり button の onClick で行う必要があります。
74
+
75
+
76
+
77
+ ```java
78
+
79
+ public class MainActivity extends AppCompatActivity {
80
+
81
+
82
+
83
+ @Override
84
+
85
+ protected void onCreate(Bundle savedInstanceState) {
86
+
87
+ super.onCreate(savedInstanceState);
88
+
89
+ setContentView(R.layout.activity_main);
90
+
91
+
92
+
93
+ final LayoutInflater inflater = (LayoutInflater)getLayoutInflater();
94
+
95
+ final ConstraintLayout layout = (ConstraintLayout)findViewById(R.id.testDynamic);
96
+
97
+ Button button = findViewById(R.id.button);
98
+
99
+ button.setOnClickListener(new View.OnClickListener() {
100
+
101
+ @Override
102
+
103
+ public void onClick(View view) {
104
+
105
+ layout.removeAllViews();
106
+
107
+ inflater.inflate(R.layout.dynamic, layout);
108
+
109
+
110
+
111
+ Button button2 = findViewById(R.id.button2);
112
+
113
+ final TextView textView = findViewById(R.id.textView);
114
+
115
+ button2.setOnClickListener(new View.OnClickListener() {
116
+
117
+ @Override
118
+
119
+ public void onClick(View view) {
120
+
1
- ごめんなさい、書きかけのものを投稿してしまったので、書き直し中です。
121
+ textView.setText("嘘だよ");
122
+
123
+ }
124
+
125
+ });
126
+
127
+ }
128
+
129
+ });
130
+
131
+ }
132
+
133
+ }
134
+
135
+ ```

1

編集中

2020/07/05 05:10

投稿

hoshi-takanori
hoshi-takanori

スコア7895

test CHANGED
@@ -1,83 +1 @@
1
- button.setOnClickListener ですが、引数の new View.OnClickListener() {
2
-
3
-
4
-
5
- ```java
6
-
7
- button.setOnClickListener(new View.OnClickListener() {
8
-
9
- @Override
10
-
11
- public void onClick(View view) {
12
-
13
- layout.removeAllViews();
14
-
15
- inflater.inflate(R.layout.dynamic, layout);
16
-
17
- }
18
-
19
- });
20
-
21
- ```
22
-
23
-
24
-
25
- ```java
26
-
27
- public class MainActivity extends AppCompatActivity {
28
-
29
-
30
-
31
- @Override
32
-
33
- protected void onCreate(Bundle savedInstanceState) {
34
-
35
- super.onCreate(savedInstanceState);
36
-
37
- setContentView(R.layout.activity_main);
38
-
39
-
40
-
41
- final LayoutInflater inflater = (LayoutInflater)getLayoutInflater();
42
-
43
- final ConstraintLayout layout = (ConstraintLayout)findViewById(R.id.testDynamic);
44
-
45
- Button button = findViewById(R.id.button);
46
-
47
- button.setOnClickListener(new View.OnClickListener() {
48
-
49
- @Override
50
-
51
- public void onClick(View view) {
52
-
53
- layout.removeAllViews();
54
-
55
- inflater.inflate(R.layout.dynamic, layout);
56
-
57
- }
58
-
59
- });
60
-
61
-
62
-
63
- Button button2 = findViewById(R.id.button2);
64
-
65
- final TextView textView = findViewById(R.id.textView);
66
-
67
- button2.setOnClickListener(new View.OnClickListener() {
68
-
69
- @Override
70
-
71
- public void onClick(View view) {
72
-
73
- textView.setText("嘘だよ");
1
+ ごめんなさい、書きかけのものを投稿してしまったので、書き直し中です。
74
-
75
- }
76
-
77
- });
78
-
79
- }
80
-
81
- }
82
-
83
- ```