0

わかりましたので、Android用のメディアプレーヤーアプリを作成しています。今まではすべて問題ありませんでした。これまでのところ、sdcard (内部および外部) 上のすべての .mp3 ファイルを表示するリスト ビューがあり、再生時に音楽ビジュアライザーが表示されます。しかし、私は一生、リストをアルファベット順に並べることはできません。すべてが動的であるため、xml はここでは機能しません。

 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;
              }}}
4

2 に答える 2

1

DEFAULT_SORT_ORDER次のように を使用するだけです。

String sortOrder = MediaStore.Audio.Media.DEFAULT_SORT_ORDER;
musiccursor = managedQuery(allsongsuri, projection , selection, null, sortOrder);
于 2012-04-18T06:07:53.670 に答える
-1

getView メソッド内でタイトルを表示しても、アルファベット順のリストは取得されません。

リストをアルファベット順に並べ替えるには、すべての音楽タイトルを文字列配列または 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;
          }}}

お役に立てれば.....

于 2012-04-18T06:03:51.810 に答える