ListView两次添加相同的信息

问题描述:

我有listview我填充它从SD卡的歌曲。当有多首歌曲时,它只会为所有歌曲添加相同的信息。所以所有的歌曲标题都是一样的。ListView两次添加相同的信息

if(cursor.moveToFirst()){ 
     for(int j=0;j<cursor.getCount();j++){ 

      int ALBUM_ID = cursor.getInt((cursor.getColumnIndex(MediaStore.Audio.AlbumColumns.ALBUM_ID))); 

      int pathcolumn = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA); 

      String path1 = cursor.getString(pathcolumn); 

      String album_url = null; 

      Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart"); 
      Uri uri = ContentUris.withAppendedId(sArtworkUri, ALBUM_ID); 

      album_url = uri.toString(); 
      ContentResolver res = this.getContentResolver(); 
       // Album 
       String album_name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.AlbumColumns.ALBUM)); 

       String year = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.AudioColumns.YEAR)); 
       // String year = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.AlbumColumns.NUMBER_OF_SONGS)); 


       // artist 
       String artist_name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.ArtistColumns.ARTIST)); 
       // display name 
       String DisplayName = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME)); 

       //title 
       String Title = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.TITLE)); 

       songtitle.add(Title); 
       artistname.add(artist_name); 
       albumname.add(album_name); 
       path.add(path1); 

      } 
      } 
       adapter = new ArrayAdapter<String>(this,R.layout.song,songtitle); 

       setListAdapter(adapter); 


     } 

尝试使用:

if(cursor.movetoFirst()) { 

    do { 

    // all your cursor accessing code 

    while(cursor.moveToNest()); 

    adapter = new ArrayAdapter<String>(this,R.layout.song,songtitle); 
    setListAdapter(adapter); 

} 

,而不是你的for循环

+0

谢谢你的男人,它的工作,你能解释一下为什么我还努力学习,我会给你在3分钟的代表 –

+0

您必须调用cursor.moveToNext或Cursor.movetoPosition(X)dor访问不同的数据集。 –

+0

好的,谢谢你 –