2012-04-18 50 views
0

好吧,即時製作Android的媒體播放器應用程序。一切都很好,直到現在。到目前爲止,我有一個列表視圖,顯示了所有.SD3文件在你的SD卡上(內部和外部),並在播放時顯示音樂可視化。但我不能爲我的生活字母表排序。一切都是動態的,所以xml在這裏不起作用。Alphabetize在ListView中查詢音樂文件

public class MusicPlayerActivity extends Activity { 
    ListView musiclist; 
    Cursor musiccursor; 
    int music_column_index; 
    int count; 
    private Intent aIntent; 
    public static String filename; 
    private RelativeLayout mRelativeLayout; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     init_phone_music_grid(); 
     mRelativeLayout = new RelativeLayout(this); 
     setContentView(mRelativeLayout); 
     mRelativeLayout.addView(musiclist); 

    } 

    public void init_phone_music_grid() { 
     System.gc(); 

     String[] projection = { 
       MediaStore.Audio.Media._ID, 
       MediaStore.Audio.Media.ARTIST, 
       MediaStore.Audio.Media.TITLE, 
       MediaStore.Audio.Media.DATA, 
       MediaStore.Audio.Media.DISPLAY_NAME, 
       MediaStore.Audio.Media.DURATION, 
       MediaStore.Audio.Media.ALBUM 
     }; 

     Uri allsongsuri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
     String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0"; 

     musiccursor = managedQuery(allsongsuri, projection , selection, null, null); 

     count = musiccursor.getCount(); 
     musiclist = (ListView) findViewById(R.id.PhoneMusicList); 
     musiclist.setAdapter(new EfficientAdapter(getApplicationContext())); 
     musiclist.setOnItemClickListener(musicgridlistener); 

    } 
    private OnItemClickListener musicgridlistener = new OnItemClickListener() { 
     public void onItemClick(AdapterView parent, View v, int position,long id) { 
       System.gc(); 
       music_column_index = musiccursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA); 
       musiccursor.moveToPosition(position); 
       filename = musiccursor.getString(music_column_index); 
       aIntent = new Intent(v.getContext(), AudioFX.class); 
       aIntent.getStringExtra(filename); 
       startActivity(aIntent); 
     } 
     }; 

    class EfficientAdapter extends BaseAdapter { 
     private Context mContext; 

     public EfficientAdapter(Context c) { 
      mContext = c; 
     } 
      public int getCount() { 
       return count; 
      } 

      public Object getItem(int position) { 
       return position; 
      } 

      public long getItemId(int position) { 
       return position; 
      } 

      public View getView(int position, View convertView, ViewGroup parent) { 
       System.gc(); 
       String id = null; 
       TextView tv; 
       if (convertView == null) { 
       tv = new TextView(mContext.getApplicationContext()); 
       } else{ 
       tv = (TextView) convertView; 
       } 
       musiccursor.moveToPosition(position); 
       music_column_index = musiccursor 
       .getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE); 
       id = musiccursor.getString(music_column_index); 
       tv.setText(id); 
       tv.setTextSize(20); 
       return tv; 
       }}} 

回答

1

你只需要使用DEFAULT_SORT_ORDER,像這樣:

String sortOrder = MediaStore.Audio.Media.DEFAULT_SORT_ORDER; 
musiccursor = managedQuery(allsongsuri, projection , selection, null, sortOrder); 
+0

工作!我會投票,但沒有足夠的代表。但同樣感謝 – Storm2010 2012-04-18 06:28:21

-1

顯示getView方法內的標題不會得到按字母順序排列的列表。

中序按字母順序排列的列表得到所有的音樂曲目成String數組或一個ArrayList 手動按字母順序排列它們,這個字符串數組傳遞給EfficientAdapters構造,並將其存儲在本地,並根據列表中的位置使用它們。

class EfficientAdapter extends BaseAdapter { 
    private Context mContext; 
    private String values[]; 

    public EfficientAdapter(Context c, String[] a) { 
     mContext = c; 
     values = a; 
    } 
     public int getCount() { 
      return count; 
     } 

     public Object getItem(int position) { 
      return position; 
     } 

     public long getItemId(int position) { 
      return position; 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 
      System.gc(); 
      String id = null; 
      TextView tv; 
      if (convertView == null) { 
      tv = new TextView(mContext.getApplicationContext()); 
      } else{ 
      tv = (TextView) convertView; 
      } 

      id = values[position]; 


      tv.setText(id); 
      tv.setTextSize(20); 
      return tv; 
      }}} 

希望這有助於.....

+0

該文件已經被傳遞到高效適配器只需要被剝奪。 – Storm2010 2012-04-18 13:38:02