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

回答編集履歴

4

回答修正

2018/10/17 08:15

投稿

razuma
razuma

スコア1313

answer CHANGED
@@ -113,6 +113,10 @@
113
113
 
114
114
  不明点あればコメントください。
115
115
 
116
+ ======回答修正 2018/10/17 17:00
117
+ 取り急ぎ、SubActivityのバグを修正しました(私のコードのせいでした)
118
+ コピペしていたので、rowButton、normaroButton、highButtonにsetOnClickListenerしようとするべきであった部分が全てreturnButtonへのsetOnClickListenerになってしまっていましたので下記コードを修正しました。
119
+
116
120
  ```
117
121
  @Override
118
122
  protected void onCreate(Bundle savedInstanceState) {
@@ -130,7 +134,7 @@
130
134
 
131
135
  // 低ボタンが押された時
132
136
  Button rowButton = findViewById(R.id.row_button);
133
- returnButton.setOnClickListener(new View.OnClickListener() {
137
+ rowButton.setOnClickListener(new View.OnClickListener() { // returnButtonになっていた
134
138
  @Override
135
139
  public void onClick(View v) {
136
140
  SharedPreferences data = getSharedPreferences("DataSave", Context.MODE_PRIVATE);
@@ -142,7 +146,7 @@
142
146
 
143
147
  // 中ボタンが押された時
144
148
  Button normalButton = findViewById(R.id.normal_button);
145
- returnButton.setOnClickListener(new View.OnClickListener() {
149
+ normalButton.setOnClickListener(new View.OnClickListener() { // returnButtonになっていた
146
150
  @Override
147
151
  public void onClick(View v) {
148
152
  SharedPreferences data = getSharedPreferences("DataSave", Context.MODE_PRIVATE);
@@ -154,7 +158,7 @@
154
158
 
155
159
  // 高ボタンが押された時
156
160
  Button highButton = findViewById(R.id.high_button);
157
- returnButton.setOnClickListener(new View.OnClickListener() {
161
+ highButton.setOnClickListener(new View.OnClickListener() { // returnButtonになっていた
158
162
  @Override
159
163
  public void onClick(View v) {
160
164
  SharedPreferences data = getSharedPreferences("DataSave", Context.MODE_PRIVATE);
@@ -165,4 +169,53 @@
165
169
  });
166
170
 
167
171
  }
168
- ```
172
+ ```
173
+ PlaySoundActivityで問題が出ない件については、ランダムで問題を出すように以下のように書いたと思いますが
174
+ このままだとどこにも入らなかった場合にはsetTextされないので何も表示されていない状態になります。
175
+ ```
176
+ if(Level == 1){
177
+ // 低の問題
178
+ if(randnum==0){
179
+ textView.setText("11×11");
180
+ }else if(randnum==1){
181
+ textView.setText("22×22");
182
+ }
183
+ // 問題省略
184
+ }
185
+ ```
186
+ とりあえず、きちんとした問題のロジックを考えるまでは暫定的に以下のようにしておくと良いかと思います。
187
+ ```
188
+ if(Level == 1){
189
+ // 低の問題
190
+ if(randnum==0){
191
+ textView.setText("11×11");
192
+ }else if(randnum==1){
193
+ textView.setText("22×22");
194
+ }else{
195
+ textView.setText("33×33");
196
+ }
197
+ }
198
+ if(Level == 2){
199
+ // 低の問題
200
+ if(randnum==0){
201
+ textView.setText("111×111");
202
+ }else if(randnum==1){
203
+ textView.setText("222×222");
204
+ }else{
205
+ textView.setText("333×333");
206
+ }
207
+ }
208
+ if(Level == 3){
209
+ // 低の問題
210
+ if(randnum==0){
211
+ textView.setText("1111×1111");
212
+ }else if(randnum==1){
213
+ textView.setText("2222×2222");
214
+ }else{
215
+ textView.setText("3333×3333");
216
+ }
217
+ }
218
+ ```
219
+
220
+ 以上でいただいた問題については解決するかと思います。
221
+ 不明点あればコメントください。

3

コメントへの回答追記3

2018/10/17 08:15

投稿

razuma
razuma

スコア1313

answer CHANGED
@@ -104,4 +104,65 @@
104
104
  問題をどのように設定したいか?によって変わってくると思いますので
105
105
  とりあえずはSharedPreferencesに設定した値を読み込んで、出てくる問題が変わると言う部分に主眼を置いて書かせていただきました。
106
106
 
107
- 手法がわかればあとどのように書くかは個人の主観によるものであると思いますので本件では具体的な話はしないでおきます。(もちろん、良い書き方と言うのは存在すると思いますが、この質問に対する本質ではないので必要であれば別途質問をあげるか、もしくは勉強を進めると良いと思います。私個人は書き方に対して正しいと意見するほどの能力はないと考えていますので差し控えさせていただきます。)
107
+ 手法がわかればあとどのように書くかは個人の主観によるものであると思いますので本件では具体的な話はしないでおきます。(もちろん、良い書き方と言うのは存在すると思いますが、この質問に対する本質ではないので必要であれば別途質問をあげるか、もしくは勉強を進めると良いと思います。私個人は書き方に対して正しいと意見するほどの能力はないと考えていますので差し控えさせていただきます。)
108
+
109
+ ======コメントへの回答追記3
110
+ SubActivityの「// 例えばチェックマーク低が押されたとき」と言うのはあくまでも例えの話だったのでそのまま書けば良いわけではなく、チェックマーク低ボタンがあるとしたときに、そのonClickに書いて欲しいと言う意味でした。今のままのコードだと画面が表示されたときに必ず1が保存されるだけとなります。
111
+ サンプルとして「row_button、normal_button、high_button」があったときに、それぞれのonClickで1,2,3が保存されるように書いてみました。
112
+ OnClickListenerについてはその上の方のreturnButton(戻るボタン)で実装していると思いますので理解しているものと思っています。
113
+
114
+ 不明点あればコメントください。
115
+
116
+ ```
117
+ @Override
118
+ protected void onCreate(Bundle savedInstanceState) {
119
+ super.onCreate(savedInstanceState);
120
+
121
+ setContentView(R.layout.activity_sub);
122
+
123
+ Button returnButton = findViewById(R.id.return_button);
124
+ returnButton.setOnClickListener(new View.OnClickListener() {
125
+ @Override
126
+ public void onClick(View v) {
127
+ finish();
128
+ }
129
+ });
130
+
131
+ // 低ボタンが押された時
132
+ Button rowButton = findViewById(R.id.row_button);
133
+ returnButton.setOnClickListener(new View.OnClickListener() {
134
+ @Override
135
+ public void onClick(View v) {
136
+ SharedPreferences data = getSharedPreferences("DataSave", Context.MODE_PRIVATE);
137
+ SharedPreferences.Editor editor = data.edit();
138
+ editor.putInt("LevelSave", 1); // 1:低、2:中、3:高の3段階があるとする。
139
+ editor.apply();
140
+ }
141
+ });
142
+
143
+ // 中ボタンが押された時
144
+ Button normalButton = findViewById(R.id.normal_button);
145
+ returnButton.setOnClickListener(new View.OnClickListener() {
146
+ @Override
147
+ public void onClick(View v) {
148
+ SharedPreferences data = getSharedPreferences("DataSave", Context.MODE_PRIVATE);
149
+ SharedPreferences.Editor editor = data.edit();
150
+ editor.putInt("LevelSave", 2); // 1:低、2:中、3:高の3段階があるとする。
151
+ editor.apply();
152
+ }
153
+ });
154
+
155
+ // 高ボタンが押された時
156
+ Button highButton = findViewById(R.id.high_button);
157
+ returnButton.setOnClickListener(new View.OnClickListener() {
158
+ @Override
159
+ public void onClick(View v) {
160
+ SharedPreferences data = getSharedPreferences("DataSave", Context.MODE_PRIVATE);
161
+ SharedPreferences.Editor editor = data.edit();
162
+ editor.putInt("LevelSave", 3); // 1:低、2:中、3:高の3段階があるとする。
163
+ editor.apply();
164
+ }
165
+ });
166
+
167
+ }
168
+ ```

2

コメントへの回答追記2

2018/10/17 01:31

投稿

razuma
razuma

スコア1313

answer CHANGED
@@ -50,4 +50,58 @@
50
50
  }
51
51
  ```
52
52
 
53
- 上記でわからなさそうであればまたコメントください。
53
+ 上記でわからなさそうであればまたコメントください。
54
+
55
+ ======コメントへの回答追記2
56
+
57
+ 例えば今、
58
+ ```
59
+ Random rand = new Random();
60
+ randnum = rand.nextInt(10);
61
+ ```
62
+ としてランダムに10問の中から選んでますよね。これを
63
+ ```
64
+ randnum = Level;
65
+ ```
66
+ としてやると、低、中、高によってそれぞれの問題に変わると思います。
67
+ さらに言うと低、中、高の問題をどのように定義してあげたいのかがわからないので例えばになってしまいますが
68
+ ```
69
+ Random rand = new Random();
70
+ randnum = rand.nextInt(10);
71
+
72
+ if(level == 1){
73
+ // 低の問題
74
+ if(randnum==0){
75
+ textView.setText("11×11");
76
+ }else if(randnum==1){
77
+ textView.setText("22×22");
78
+ }
79
+ // 問題省略
80
+ }
81
+
82
+ if(level == 2){
83
+ // 中の問題
84
+ if(randnum==0){
85
+ textView.setText("111×111");
86
+ }else if(randnum==1){
87
+ textView.setText("222×222");
88
+ }
89
+ // 問題省略
90
+ }
91
+
92
+ if(level == 3){
93
+ // 高の問題
94
+ if(randnum==0){
95
+ textView.setText("1111×1111");
96
+ }else if(randnum==1){
97
+ textView.setText("2222×2222");
98
+ }
99
+ // 問題省略
100
+ }
101
+ ```
102
+ このようにすると低、中、高によってランダムな10問が変わるようなものになるかと思います。
103
+
104
+ 問題をどのように設定したいか?によって変わってくると思いますので
105
+ とりあえずはSharedPreferencesに設定した値を読み込んで、出てくる問題が変わると言う部分に主眼を置いて書かせていただきました。
106
+
107
+ 手法がわかればあとどのように書くかは個人の主観によるものであると思いますので本件では具体的な話はしないでおきます。(もちろん、良い書き方と言うのは存在すると思いますが、この質問に対する本質ではないので必要であれば別途質問をあげるか、もしくは勉強を進めると良いと思います。私個人は書き方に対して正しいと意見するほどの能力はないと考えていますので差し控えさせていただきます。)

1

コメントに対する回答

2018/10/05 06:55

投稿

razuma
razuma

スコア1313

answer CHANGED
@@ -13,4 +13,41 @@
13
13
  難易度については大丈夫そうかな?と思いますが、スヌーズについてはどのように実装しているのかがわからないので(AlarmManagerにそのようなものがある?自前実装?)また別の問題が発生しそうであればコメントください。
14
14
 
15
15
  また上記、具体的な実装方法などがわからない場合には同じくコメントください。
16
- (MainActivity以外にも全体のコードがあると回答しやすいです。全体コードを貼ると長くなりそうであればgithubなどにソースをあげるでも良いかと思います。)
16
+ (MainActivity以外にも全体のコードがあると回答しやすいです。全体コードを貼ると長くなりそうであればgithubなどにソースをあげるでも良いかと思います。)
17
+
18
+ ======コメントへの回答追記
19
+
20
+ 参考用に書かせていただいたサイトに保存と読み出し両方とも書かれているのでそのまま流用させていただきます。
21
+
22
+ まず、保存についてですが設定画面で難易度を選ぶとSharedPreferencesに値が保存されるようにします。
23
+ 難易度のチェックマークが押されたときに保存か、もしくはセットボタンなどを用意してそれが押されたときに保存でも良いと思います。
24
+ ```SubActivity
25
+ // 例えばチェックマーク低が押されたとき
26
+ SharedPreferences data = getSharedPreferences("DataSave", Context.MODE_PRIVATE);
27
+ SharedPreferences.Editor editor = data.edit();
28
+ editor.putInt("LevelSave", 1); // 1:低、2:中、3:高の3段階があるとする。
29
+ editor.apply();
30
+ ```
31
+
32
+ 次に取得について、AlarmCheckActivityで実際に問題が設定される場所でSharedPreferencesから値を取得します。
33
+ ```AlarmCheckActivity
34
+ // onCreateなどで値を取得する
35
+ SharedPreferences data = getSharedPreferences("DataSave", Context.MODE_PRIVATE);
36
+ int Level = data.getInt("LevelSave", 1); // 第2引数は値がなかったときのデフォルト
37
+
38
+ // レベル別で設定する問題を変える
39
+ // 分岐の書き方は好きなかんじで。
40
+ if(level == 1){
41
+ // 低の問題
42
+ }
43
+
44
+ if(level == 2){
45
+ // 中の問題
46
+ }
47
+
48
+ if(level == 3){
49
+ // 高の問題
50
+ }
51
+ ```
52
+
53
+ 上記でわからなさそうであればまたコメントください。