1

我在與一些mp3文件片段創建一個列表,然後我這個列表傳遞給另一個片段,它的工作原理,在這個片段我嘗試當用戶按下一個獲得該項目的價值。獲得所選項目的值拋出IndexOutOfBoundsException異常

這下面的代碼行確實在其中創建列表中的片段工作,但在這個片段,它拋出IndexOutOfBoundsException異常。

String trackId = SD_PATH + songs.get(position); 

全碼:

public class QueueListFragment extends ListFragment { 

    private static final String SD_PATH = new String(Environment.getExternalStorageDirectory().getPath() + "/"); 
    private List<String> songs = new ArrayList<String>(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     ArrayAdapter<String> songList = new ArrayAdapter<String>(getActivity().getApplicationContext(), R.layout.playlist_item2, songs); 
     setListAdapter(songList); 
    } 

    public void onListReceived(List<String> songs) { 

     ArrayAdapter<String> songList = new ArrayAdapter<String>(getActivity().getApplicationContext(), R.layout.playlist_item2, songs); 
     setListAdapter(songList); 

    } 

    @Override 
    public void onListItemClick(ListView listView, View view, int position, 
      long longId) { 
     super.onListItemClick(listView, view, position, longId); 


     String trackId = SD_PATH + songs.get(position); 
     Toast.makeText(getActivity().getApplicationContext(), trackId, Toast.LENGTH_SHORT).show(); 

    } 

} 

完整的logcat:

02-27 21:47:54.300: W/dalvikvm(3781): threadid=1: thread exiting with uncaught exception (group=0x40a70930) 
02-27 21:47:54.333: E/AndroidRuntime(3781): FATAL EXCEPTION: main 
02-27 21:47:54.333: E/AndroidRuntime(3781): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
02-27 21:47:54.333: E/AndroidRuntime(3781):  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 
02-27 21:47:54.333: E/AndroidRuntime(3781):  at java.util.ArrayList.get(ArrayList.java:304) 
02-27 21:47:54.333: E/AndroidRuntime(3781):  at com.harteg.fragmentstest.QueueListFragment.onListItemClick(QueueListFragment.java:50) 
02-27 21:47:54.333: E/AndroidRuntime(3781):  at android.support.v4.app.ListFragment$2.onItemClick(ListFragment.java:58) 
02-27 21:47:54.333: E/AndroidRuntime(3781):  at android.widget.AdapterView.performItemClick(AdapterView.java:298) 
02-27 21:47:54.333: E/AndroidRuntime(3781):  at android.widget.AbsListView.performItemClick(AbsListView.java:1100) 
02-27 21:47:54.333: E/AndroidRuntime(3781):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:2749) 
02-27 21:47:54.333: E/AndroidRuntime(3781):  at android.widget.AbsListView$1.run(AbsListView.java:3423) 
02-27 21:47:54.333: E/AndroidRuntime(3781):  at android.os.Handler.handleCallback(Handler.java:725) 
02-27 21:47:54.333: E/AndroidRuntime(3781):  at android.os.Handler.dispatchMessage(Handler.java:92) 
02-27 21:47:54.333: E/AndroidRuntime(3781):  at android.os.Looper.loop(Looper.java:137) 
02-27 21:47:54.333: E/AndroidRuntime(3781):  at android.app.ActivityThread.main(ActivityThread.java:5039) 
02-27 21:47:54.333: E/AndroidRuntime(3781):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-27 21:47:54.333: E/AndroidRuntime(3781):  at java.lang.reflect.Method.invoke(Method.java:511) 
02-27 21:47:54.333: E/AndroidRuntime(3781):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
02-27 21:47:54.333: E/AndroidRuntime(3781):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
02-27 21:47:54.333: E/AndroidRuntime(3781):  at dalvik.system.NativeStart.main(Native Method) 
+0

你在哪裏初始化歌曲?貌似歌曲是空的,你想檢索值 – nedaRM 2013-02-27 21:59:01

回答

3

你是可變的陰影songs,所以類範圍的songs總有大小的0。 你宣佈songs和實例化它在頂部:

private List<String> songs = new ArrayList<String>(); size of 0 

然而onListReceived()有一個名爲songs變量,使得適配器時使用。

你可以這樣做:

String trackId = SD_PATH + listView.getItemAtPosition(position); 

String trackId = SD_PATH + listView.getAdapter().getItem(position); 

或acually使課堂songs指向新的列表,一旦onListReceived()被稱爲:

public void onListReceived(List<String> newSongs) { 
     this.songs = newSongs; 
     ArrayAdapter<String> songList = new ArrayAdapter<String>(getActivity().getApplicationContext(), R.layout.playlist_item2, songs); 
     setListAdapter(songList); 
    } 
+1

謝謝!去與你的最後一個建議,這對我的作品。 – Jakob 2013-02-27 22:21:42