回答編集履歴

1

追記1

2021/07/07 06:06

投稿

BeatStar
BeatStar

スコア4962

test CHANGED
@@ -79,3 +79,155 @@
79
79
 
80
80
 
81
81
  まずはそこからやってみてください。
82
+
83
+
84
+
85
+ -------------------------------------
86
+
87
+
88
+
89
+ [追記1]
90
+
91
+
92
+
93
+ えーっと、MainActivity.javaの65行目は何になっていますか?
94
+
95
+
96
+
97
+ 私の環境(packageの前に改行が複数あるのにそれを削除したコードになっているとかの可能性も考えて)
98
+
99
+ では、
100
+
101
+
102
+
103
+ ```Java
104
+
105
+ String song = (String) listView.getItemAtPosition(position);
106
+
107
+ ```
108
+
109
+
110
+
111
+ ですね。
112
+
113
+
114
+
115
+ では、listView とはなんでしょうか。
116
+
117
+
118
+
119
+ [android.view.View.(中略).ListView](https://developer.android.com/reference/android/widget/ListView)ですよね。
120
+
121
+
122
+
123
+ getItemAtPositionメソッドはこの[ListViewのメソッド](https://developer.android.com/reference/android/widget/AdapterView#getItemAtPosition(int))ですね。(厳密には親であるAdapterViewのメンバですが)
124
+
125
+
126
+
127
+ では、このメンバは何をするためのものでしょうか。
128
+
129
+ そう、『ListViewのposition番目にあるデータを取得する』ですね。
130
+
131
+
132
+
133
+ では、positionとは何でしょうか。
134
+
135
+ int positionですね。
136
+
137
+
138
+
139
+ つまり、『ListViewのposition番目にあるデータを取得する』ですね。
140
+
141
+
142
+
143
+ よーく考えてみてください。
144
+
145
+
146
+
147
+ もしListViewが持つデータが8個しかないのに、「10番目のデータをくれ」としたらどうでしょうか?
148
+
149
+ 無理ですね。
150
+
151
+
152
+
153
+ だって、8個しかないんですよ?
154
+
155
+ それをあたかも11個以上あるような無茶ぶりです。
156
+
157
+
158
+
159
+ なので、「いや、そんなに無いから……」と突っ込まれますよね。
160
+
161
+
162
+
163
+ こういう場合は**デバッグ**(debug)をしましょう。
164
+
165
+
166
+
167
+ **__プロでもデバッグぐらいはします__**。
168
+
169
+
170
+
171
+ たとえば、**デバッガ**なり、いわゆる**printfデバッグ**(JavaだとSystem.out.printメソッド等に相当)なりでデバッグします。
172
+
173
+
174
+
175
+ 実際にデバッグとして、System.out.printlnメソッド等で
176
+
177
+ 「positionの値」と「ListViewが持つデータの個数」をそれぞれ出力してみてください。
178
+
179
+
180
+
181
+ そうすると、
182
+
183
+
184
+
185
+ "position = 5, ListViewのデータの個数 = 5" とかみたいな感じのメッセージになるはずです。
186
+
187
+ (もちろん、出力する文字列データやその書式によって変わるけど)
188
+
189
+
190
+
191
+ 配列やリスト( LinkedListとか )のようなデータ列は、
192
+
193
+ 「0番目」から「(n-1)番目」までしかアクセスできません。
194
+
195
+
196
+
197
+ つまり、アクセスできるのは0番目から「要素数の -1 した分」だけです。
198
+
199
+
200
+
201
+ 要素数10 なら 0番目から (10 - 1 = 9) で 9番目までしかアクセスできません。
202
+
203
+
204
+
205
+ それなのに、arr[10] とかをするとどうなるでしょうか。
206
+
207
+
208
+
209
+ 「えーっと……そんなに無いんだけど……?」と言われますよね?
210
+
211
+
212
+
213
+ 10階建てのビルなのに11階(ただし屋上ではない)に行こうとするようなものです。
214
+
215
+
216
+
217
+ できませんね。
218
+
219
+
220
+
221
+ それが原因。
222
+
223
+
224
+
225
+ 原因が分かれば対処も簡単。
226
+
227
+
228
+
229
+ 「要素数を超えなければいい」という考えになりませんか?
230
+
231
+
232
+
233
+ 後は仕様とかそういうので変わります。