回答編集履歴

4

回答修正

2018/10/17 08:15

投稿

razuma
razuma

スコア1313

test CHANGED
@@ -228,6 +228,14 @@
228
228
 
229
229
 
230
230
 
231
+ ======回答修正 2018/10/17 17:00
232
+
233
+ 取り急ぎ、SubActivityのバグを修正しました(私のコードのせいでした)
234
+
235
+ コピペしていたので、rowButton、normaroButton、highButtonにsetOnClickListenerしようとするべきであった部分が全てreturnButtonへのsetOnClickListenerになってしまっていましたので下記コードを修正しました。
236
+
237
+
238
+
231
239
  ```
232
240
 
233
241
  @Override
@@ -262,7 +270,7 @@
262
270
 
263
271
  Button rowButton = findViewById(R.id.row_button);
264
272
 
265
- returnButton.setOnClickListener(new View.OnClickListener() {
273
+ rowButton.setOnClickListener(new View.OnClickListener() { // returnButtonになっていた
266
274
 
267
275
  @Override
268
276
 
@@ -286,7 +294,7 @@
286
294
 
287
295
  Button normalButton = findViewById(R.id.normal_button);
288
296
 
289
- returnButton.setOnClickListener(new View.OnClickListener() {
297
+ normalButton.setOnClickListener(new View.OnClickListener() { // returnButtonになっていた
290
298
 
291
299
  @Override
292
300
 
@@ -310,7 +318,7 @@
310
318
 
311
319
  Button highButton = findViewById(R.id.high_button);
312
320
 
313
- returnButton.setOnClickListener(new View.OnClickListener() {
321
+ highButton.setOnClickListener(new View.OnClickListener() { // returnButtonになっていた
314
322
 
315
323
  @Override
316
324
 
@@ -333,3 +341,101 @@
333
341
  }
334
342
 
335
343
  ```
344
+
345
+ PlaySoundActivityで問題が出ない件については、ランダムで問題を出すように以下のように書いたと思いますが
346
+
347
+ このままだとどこにも入らなかった場合にはsetTextされないので何も表示されていない状態になります。
348
+
349
+ ```
350
+
351
+ if(Level == 1){
352
+
353
+ // 低の問題
354
+
355
+ if(randnum==0){
356
+
357
+ textView.setText("11×11");
358
+
359
+ }else if(randnum==1){
360
+
361
+ textView.setText("22×22");
362
+
363
+ }
364
+
365
+ // 問題省略
366
+
367
+ }
368
+
369
+ ```
370
+
371
+ とりあえず、きちんとした問題のロジックを考えるまでは暫定的に以下のようにしておくと良いかと思います。
372
+
373
+ ```
374
+
375
+ if(Level == 1){
376
+
377
+ // 低の問題
378
+
379
+ if(randnum==0){
380
+
381
+ textView.setText("11×11");
382
+
383
+ }else if(randnum==1){
384
+
385
+ textView.setText("22×22");
386
+
387
+ }else{
388
+
389
+ textView.setText("33×33");
390
+
391
+ }
392
+
393
+ }
394
+
395
+ if(Level == 2){
396
+
397
+ // 低の問題
398
+
399
+ if(randnum==0){
400
+
401
+ textView.setText("111×111");
402
+
403
+ }else if(randnum==1){
404
+
405
+ textView.setText("222×222");
406
+
407
+ }else{
408
+
409
+ textView.setText("333×333");
410
+
411
+ }
412
+
413
+ }
414
+
415
+ if(Level == 3){
416
+
417
+ // 低の問題
418
+
419
+ if(randnum==0){
420
+
421
+ textView.setText("1111×1111");
422
+
423
+ }else if(randnum==1){
424
+
425
+ textView.setText("2222×2222");
426
+
427
+ }else{
428
+
429
+ textView.setText("3333×3333");
430
+
431
+ }
432
+
433
+ }
434
+
435
+ ```
436
+
437
+
438
+
439
+ 以上でいただいた問題については解決するかと思います。
440
+
441
+ 不明点あればコメントください。

3

コメントへの回答追記3

2018/10/17 08:15

投稿

razuma
razuma

スコア1313

test CHANGED
@@ -211,3 +211,125 @@
211
211
 
212
212
 
213
213
  手法がわかればあとどのように書くかは個人の主観によるものであると思いますので本件では具体的な話はしないでおきます。(もちろん、良い書き方と言うのは存在すると思いますが、この質問に対する本質ではないので必要であれば別途質問をあげるか、もしくは勉強を進めると良いと思います。私個人は書き方に対して正しいと意見するほどの能力はないと考えていますので差し控えさせていただきます。)
214
+
215
+
216
+
217
+ ======コメントへの回答追記3
218
+
219
+ SubActivityの「// 例えばチェックマーク低が押されたとき」と言うのはあくまでも例えの話だったのでそのまま書けば良いわけではなく、チェックマーク低ボタンがあるとしたときに、そのonClickに書いて欲しいと言う意味でした。今のままのコードだと画面が表示されたときに必ず1が保存されるだけとなります。
220
+
221
+ サンプルとして「row_button、normal_button、high_button」があったときに、それぞれのonClickで1,2,3が保存されるように書いてみました。
222
+
223
+ OnClickListenerについてはその上の方のreturnButton(戻るボタン)で実装していると思いますので理解しているものと思っています。
224
+
225
+
226
+
227
+ 不明点あればコメントください。
228
+
229
+
230
+
231
+ ```
232
+
233
+ @Override
234
+
235
+ protected void onCreate(Bundle savedInstanceState) {
236
+
237
+ super.onCreate(savedInstanceState);
238
+
239
+
240
+
241
+ setContentView(R.layout.activity_sub);
242
+
243
+
244
+
245
+ Button returnButton = findViewById(R.id.return_button);
246
+
247
+ returnButton.setOnClickListener(new View.OnClickListener() {
248
+
249
+ @Override
250
+
251
+ public void onClick(View v) {
252
+
253
+ finish();
254
+
255
+ }
256
+
257
+ });
258
+
259
+
260
+
261
+ // 低ボタンが押された時
262
+
263
+ Button rowButton = findViewById(R.id.row_button);
264
+
265
+ returnButton.setOnClickListener(new View.OnClickListener() {
266
+
267
+ @Override
268
+
269
+ public void onClick(View v) {
270
+
271
+ SharedPreferences data = getSharedPreferences("DataSave", Context.MODE_PRIVATE);
272
+
273
+ SharedPreferences.Editor editor = data.edit();
274
+
275
+ editor.putInt("LevelSave", 1); // 1:低、2:中、3:高の3段階があるとする。
276
+
277
+ editor.apply();
278
+
279
+ }
280
+
281
+ });
282
+
283
+
284
+
285
+ // 中ボタンが押された時
286
+
287
+ Button normalButton = findViewById(R.id.normal_button);
288
+
289
+ returnButton.setOnClickListener(new View.OnClickListener() {
290
+
291
+ @Override
292
+
293
+ public void onClick(View v) {
294
+
295
+ SharedPreferences data = getSharedPreferences("DataSave", Context.MODE_PRIVATE);
296
+
297
+ SharedPreferences.Editor editor = data.edit();
298
+
299
+ editor.putInt("LevelSave", 2); // 1:低、2:中、3:高の3段階があるとする。
300
+
301
+ editor.apply();
302
+
303
+ }
304
+
305
+ });
306
+
307
+
308
+
309
+ // 高ボタンが押された時
310
+
311
+ Button highButton = findViewById(R.id.high_button);
312
+
313
+ returnButton.setOnClickListener(new View.OnClickListener() {
314
+
315
+ @Override
316
+
317
+ public void onClick(View v) {
318
+
319
+ SharedPreferences data = getSharedPreferences("DataSave", Context.MODE_PRIVATE);
320
+
321
+ SharedPreferences.Editor editor = data.edit();
322
+
323
+ editor.putInt("LevelSave", 3); // 1:低、2:中、3:高の3段階があるとする。
324
+
325
+ editor.apply();
326
+
327
+ }
328
+
329
+ });
330
+
331
+
332
+
333
+ }
334
+
335
+ ```

2

コメントへの回答追記2

2018/10/17 01:31

投稿

razuma
razuma

スコア1313

test CHANGED
@@ -103,3 +103,111 @@
103
103
 
104
104
 
105
105
  上記でわからなさそうであればまたコメントください。
106
+
107
+
108
+
109
+ ======コメントへの回答追記2
110
+
111
+
112
+
113
+ 例えば今、
114
+
115
+ ```
116
+
117
+ Random rand = new Random();
118
+
119
+ randnum = rand.nextInt(10);
120
+
121
+ ```
122
+
123
+ としてランダムに10問の中から選んでますよね。これを
124
+
125
+ ```
126
+
127
+ randnum = Level;
128
+
129
+ ```
130
+
131
+ としてやると、低、中、高によってそれぞれの問題に変わると思います。
132
+
133
+ さらに言うと低、中、高の問題をどのように定義してあげたいのかがわからないので例えばになってしまいますが
134
+
135
+ ```
136
+
137
+ Random rand = new Random();
138
+
139
+ randnum = rand.nextInt(10);
140
+
141
+
142
+
143
+ if(level == 1){
144
+
145
+ // 低の問題
146
+
147
+ if(randnum==0){
148
+
149
+ textView.setText("11×11");
150
+
151
+ }else if(randnum==1){
152
+
153
+ textView.setText("22×22");
154
+
155
+ }
156
+
157
+ // 問題省略
158
+
159
+ }
160
+
161
+
162
+
163
+ if(level == 2){
164
+
165
+ // 中の問題
166
+
167
+ if(randnum==0){
168
+
169
+ textView.setText("111×111");
170
+
171
+ }else if(randnum==1){
172
+
173
+ textView.setText("222×222");
174
+
175
+ }
176
+
177
+ // 問題省略
178
+
179
+ }
180
+
181
+
182
+
183
+ if(level == 3){
184
+
185
+ // 高の問題
186
+
187
+ if(randnum==0){
188
+
189
+ textView.setText("1111×1111");
190
+
191
+ }else if(randnum==1){
192
+
193
+ textView.setText("2222×2222");
194
+
195
+ }
196
+
197
+ // 問題省略
198
+
199
+ }
200
+
201
+ ```
202
+
203
+ このようにすると低、中、高によってランダムな10問が変わるようなものになるかと思います。
204
+
205
+
206
+
207
+ 問題をどのように設定したいか?によって変わってくると思いますので
208
+
209
+ とりあえずはSharedPreferencesに設定した値を読み込んで、出てくる問題が変わると言う部分に主眼を置いて書かせていただきました。
210
+
211
+
212
+
213
+ 手法がわかればあとどのように書くかは個人の主観によるものであると思いますので本件では具体的な話はしないでおきます。(もちろん、良い書き方と言うのは存在すると思いますが、この質問に対する本質ではないので必要であれば別途質問をあげるか、もしくは勉強を進めると良いと思います。私個人は書き方に対して正しいと意見するほどの能力はないと考えていますので差し控えさせていただきます。)

1

コメントに対する回答

2018/10/05 06:55

投稿

razuma
razuma

スコア1313

test CHANGED
@@ -29,3 +29,77 @@
29
29
  また上記、具体的な実装方法などがわからない場合には同じくコメントください。
30
30
 
31
31
  (MainActivity以外にも全体のコードがあると回答しやすいです。全体コードを貼ると長くなりそうであればgithubなどにソースをあげるでも良いかと思います。)
32
+
33
+
34
+
35
+ ======コメントへの回答追記
36
+
37
+
38
+
39
+ 参考用に書かせていただいたサイトに保存と読み出し両方とも書かれているのでそのまま流用させていただきます。
40
+
41
+
42
+
43
+ まず、保存についてですが設定画面で難易度を選ぶとSharedPreferencesに値が保存されるようにします。
44
+
45
+ 難易度のチェックマークが押されたときに保存か、もしくはセットボタンなどを用意してそれが押されたときに保存でも良いと思います。
46
+
47
+ ```SubActivity
48
+
49
+ // 例えばチェックマーク低が押されたとき
50
+
51
+ SharedPreferences data = getSharedPreferences("DataSave", Context.MODE_PRIVATE);
52
+
53
+ SharedPreferences.Editor editor = data.edit();
54
+
55
+ editor.putInt("LevelSave", 1); // 1:低、2:中、3:高の3段階があるとする。
56
+
57
+ editor.apply();
58
+
59
+ ```
60
+
61
+
62
+
63
+ 次に取得について、AlarmCheckActivityで実際に問題が設定される場所でSharedPreferencesから値を取得します。
64
+
65
+ ```AlarmCheckActivity
66
+
67
+ // onCreateなどで値を取得する
68
+
69
+ SharedPreferences data = getSharedPreferences("DataSave", Context.MODE_PRIVATE);
70
+
71
+ int Level = data.getInt("LevelSave", 1); // 第2引数は値がなかったときのデフォルト
72
+
73
+
74
+
75
+ // レベル別で設定する問題を変える
76
+
77
+ // 分岐の書き方は好きなかんじで。
78
+
79
+ if(level == 1){
80
+
81
+ // 低の問題
82
+
83
+ }
84
+
85
+
86
+
87
+ if(level == 2){
88
+
89
+ // 中の問題
90
+
91
+ }
92
+
93
+
94
+
95
+ if(level == 3){
96
+
97
+ // 高の問題
98
+
99
+ }
100
+
101
+ ```
102
+
103
+
104
+
105
+ 上記でわからなさそうであればまたコメントください。