2012-04-18 7 views
0

それでは、アンドロイド用のメディアプレーヤーアプリを作っています。今まではすべてが大丈夫でした。これまで私は、urのsdcard(内部と外部)上のすべての.mp3ファイルを表示し、音楽ビジュアライザを表示するときにリストビューを持っています。しかし、私の人生のために私は傾けて、リストをアルファベット順に並べます。すべてが動的なので、ここではXMLは機能しません。 GetViewメソッド内のタイトルを表示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

-1

は、アルファベット順のリストを取得することはありません。

INORDER文字列配列や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

ファイルが既に効率的なアダプタに渡されていましたalpahbetizedする必要があるだけです。 – Storm2010

関連する問題