在ListView中的某些点处插入TextView

时间:2011-11-21 20:31:38

标签: android android-listview textview

我有一个列表视图,显示按此方法填充的alphebetical顺序的歌曲

public void updatelist(){

    Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,null);
    int j =0;

    if(cursor.moveToFirst()){
        do{

            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);
                Collections.sort(songtitle);
                artistname.add(songtitle.indexOf(Title), artist_name);
                albumname.add(songtitle.indexOf(Title), album_name);
                path.add(songtitle.indexOf(Title),path1);
                albumartwork.add(songtitle.indexOf(Title),album_url);
                j++;
            }while(cursor.moveToNext());
            }
              Collections.sort(songtitle);

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

                setListAdapter(adapter);


        }

我的问题是我想在SongName的第一个字母发生变化时插入分隔符。 我有这种方法来获取歌曲名称的第一个字母,如果它与前一个字母不同..

   private void alphebetdividers(ArrayList<String> songtitle2) {
    String newString = null;
    // TODO Auto-generated method stub
    ArrayList<Character> letters = new ArrayList<Character>();
    int i = 0;
    int j = 0;
    while( j < songtitle.size()-1){
            if(songtitle2.get(i).charAt(0) == songtitle2.get(i+1).charAt(0)){
                Toast.makeText(getApplication(), songtitle2.get(i).charAt(0) + "== " + songtitle2.get(i+1).charAt(0), Toast.LENGTH_LONG).show();
            }else{
                // Display Char with TextView
                String songName = songtitle2.get(i);
               newString = songName.substring(0, 1);


            }
      j++;
      i++;

}

如何在列表视图中的适当位置显示此内容。谢谢你,如果你知道答案,我会给你一个很好的评价。

2 个答案:

答案 0 :(得分:0)

您可能需要一个实现SectionIndexer的适配器,特别是AlphabetIndexer。请参阅thisthis

答案 1 :(得分:0)

你真的应该使用适配器......有些库可以为你完成所有这些工作,你不应该自己在一个大规模的循环中完成它!

以下是一些帮助您入门的sample code ...请注意,它有点过时,因为它使用了一些弃用的方法(例如managedQuery等)。如果你想完全100%正确,你会想要使用Honeycomb版本中引入的LoaderManager.LoaderCallbacks<Cursor接口,但这是一个好的开始。

要对显示的视图进行排序,您可以使用sortOrder的{​​{1}}方法中的ContentProvider参数。