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

回答編集履歴

1

追記1

2021/07/07 06:06

投稿

BeatStar
BeatStar

スコア4962

answer CHANGED
@@ -38,4 +38,80 @@
38
38
 
39
39
  例えば『コメントにする』とか。
40
40
 
41
- まずはそこからやってみてください。
41
+ まずはそこからやってみてください。
42
+
43
+ -------------------------------------
44
+
45
+ [追記1]
46
+
47
+ えーっと、MainActivity.javaの65行目は何になっていますか?
48
+
49
+ 私の環境(packageの前に改行が複数あるのにそれを削除したコードになっているとかの可能性も考えて)
50
+ では、
51
+
52
+ ```Java
53
+ String song = (String) listView.getItemAtPosition(position);
54
+ ```
55
+
56
+ ですね。
57
+
58
+ では、listView とはなんでしょうか。
59
+
60
+ [android.view.View.(中略).ListView](https://developer.android.com/reference/android/widget/ListView)ですよね。
61
+
62
+ getItemAtPositionメソッドはこの[ListViewのメソッド](https://developer.android.com/reference/android/widget/AdapterView#getItemAtPosition(int))ですね。(厳密には親であるAdapterViewのメンバですが)
63
+
64
+ では、このメンバは何をするためのものでしょうか。
65
+ そう、『ListViewのposition番目にあるデータを取得する』ですね。
66
+
67
+ では、positionとは何でしょうか。
68
+ int positionですね。
69
+
70
+ つまり、『ListViewのposition番目にあるデータを取得する』ですね。
71
+
72
+ よーく考えてみてください。
73
+
74
+ もしListViewが持つデータが8個しかないのに、「10番目のデータをくれ」としたらどうでしょうか?
75
+ 無理ですね。
76
+
77
+ だって、8個しかないんですよ?
78
+ それをあたかも11個以上あるような無茶ぶりです。
79
+
80
+ なので、「いや、そんなに無いから……」と突っ込まれますよね。
81
+
82
+ こういう場合は**デバッグ**(debug)をしましょう。
83
+
84
+ **__プロでもデバッグぐらいはします__**。
85
+
86
+ たとえば、**デバッガ**なり、いわゆる**printfデバッグ**(JavaだとSystem.out.printメソッド等に相当)なりでデバッグします。
87
+
88
+ 実際にデバッグとして、System.out.printlnメソッド等で
89
+ 「positionの値」と「ListViewが持つデータの個数」をそれぞれ出力してみてください。
90
+
91
+ そうすると、
92
+
93
+ "position = 5, ListViewのデータの個数 = 5" とかみたいな感じのメッセージになるはずです。
94
+ (もちろん、出力する文字列データやその書式によって変わるけど)
95
+
96
+ 配列やリスト( LinkedListとか )のようなデータ列は、
97
+ 「0番目」から「(n-1)番目」までしかアクセスできません。
98
+
99
+ つまり、アクセスできるのは0番目から「要素数の -1 した分」だけです。
100
+
101
+ 要素数10 なら 0番目から (10 - 1 = 9) で 9番目までしかアクセスできません。
102
+
103
+ それなのに、arr[10] とかをするとどうなるでしょうか。
104
+
105
+ 「えーっと……そんなに無いんだけど……?」と言われますよね?
106
+
107
+ 10階建てのビルなのに11階(ただし屋上ではない)に行こうとするようなものです。
108
+
109
+ できませんね。
110
+
111
+ それが原因。
112
+
113
+ 原因が分かれば対処も簡単。
114
+
115
+ 「要素数を超えなければいい」という考えになりませんか?
116
+
117
+ 後は仕様とかそういうので変わります。