android音乐播放器_专辑列表

    专辑列表就是显示歌曲所属的专辑,也是用ListView来显示,同样也需要定义一个Adapter。

一、Activity

     

/**
 * 
 */
package com.android.musicplayer.activity;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import com.android.musicplayer.adapter.AlbumListAdapter;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

/**
 * @author Administrator
 * 
 */
public class AlbumActivity extends Activity {

	private String[] albums;
	private ListView listView;
	private AlertDialog ad = null;
	private AlertDialog.Builder builder = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.albums);
		setListData();
	}

	private void setListData() {
		listView = (ListView) findViewById(R.id.albums_listview_id);
		listView.setCacheColorHint(00000000);// 设置这个就不会出现ListView滑动画面混乱的情况。

		Cursor c = this.getContentResolver().query(
				MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
				new String[] { MediaStore.Audio.Media.TITLE,
						MediaStore.Audio.Media.DURATION,
						MediaStore.Audio.Media.ARTIST,
						MediaStore.Audio.Media.ALBUM,
						MediaStore.Audio.Media._ID,
						MediaStore.Audio.Media.DISPLAY_NAME }, null, null,
				MediaStore.Audio.Media.ALBUM);
		if (c == null || c.getCount() == 0) {
			builder = new AlertDialog.Builder(this);
			builder.setMessage("存储列表为空...").setPositiveButton("确定", null);
			ad = builder.create();
			ad.show();
			return;
		}
		c.moveToFirst();
		int num = c.getCount();
		HashSet<String> set = new HashSet<String>();
		for (int i = 0; i < num; i++) {
			String szAlbum = c.getString(c
					.getColumnIndex(MediaStore.Audio.Media.ALBUM));
			set.add(szAlbum);
			c.moveToNext();
		}
		num = set.size();
		Iterator<String> it = set.iterator();
		albums = new String[num];
		int i = 0;
		while (it.hasNext()) {
			albums[i] = it.next().toString();
			i++;
		}
		String album = "";
		for (int j = 0; j < num; j++) {
			if (j < num - 1) {
				album = album + "'" + albums[j] + "',";
			} else {
				album = album + "'" + albums[j] + "'";
			}
		}

		Cursor c1 = this.getContentResolver().query(
				MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
				new String[] { MediaStore.Audio.Media.TITLE,
						MediaStore.Audio.Media.DURATION,
						MediaStore.Audio.Media.ARTIST,
						MediaStore.Audio.Media.ALBUM,
						MediaStore.Audio.Media._ID,
						MediaStore.Audio.Media.DISPLAY_NAME, }, null, null,
				MediaStore.Audio.Media.ALBUM);
		c1.moveToFirst();
		HashMap<String, String> map = new HashMap<String, String>();
		int num1 = c1.getCount();
		for (int j = 0; j < num1; j++) {
			map.put(c1.getString(3), c1.getString(2));
			c1.moveToNext();
		}
		listView.setAdapter(new AlbumListAdapter(this, albums, map));
		listView.setOnItemClickListener(new AlbumsItemClickListener());
	}

	class AlbumsItemClickListener implements OnItemClickListener {

		@Override
		public void onItemClick(AdapterView<?> arg0, View view, int position,
				long id) {
			Intent intent = new Intent();
			intent.setClass(AlbumActivity.this, SongsOfAlbumActivity.class);
			intent.putExtra("albums", albums[position]);
			startActivity(intent);
		}
	}

}
二、布局

1、albums.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/albums_listview_id"
        android:background="@drawable/listbg"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>

</LinearLayout>

2、albumslist.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="2dip"
    android:background="@android:color/transparent"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/Albumsitem"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:paddingRight="5dip" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="60dip"
        android:layout_weight="1"
        android:gravity="center_vertical"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/album"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:textColor="#ffffff"
            android:textSize="18dp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/mysinger"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginTop="5dip"
            android:textColor="#ffffff"
            android:textSize="13dp" />
    </LinearLayout>

</LinearLayout>

三、适配器Adapter

/**
 * 
 */
package com.android.musicplayer.adapter;

import java.util.HashMap;
import com.android.musicplayer.activity.R;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * @author Administrator
 * 
 */
public class AlbumListAdapter extends BaseAdapter {
	private Context myContext;
	private String[] albums;
	private HashMap<String, String> myMap;

	public AlbumListAdapter(Context context, String[] str1,
			HashMap<String, String> map) {
		myContext = context;
		albums = str1;
		myMap = map;
	}

	public int getCount() {
		return albums.length;
	}

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

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

	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder holder = null;
		View vi = convertView;
		if (convertView == null) {
			holder = new ViewHolder();
			vi = LayoutInflater.from(myContext).inflate(R.layout.albumslist,
					null);
			holder.album = (TextView) vi.findViewById(R.id.album);
			holder.artist = (TextView) vi.findViewById(R.id.mysinger);
			holder.Albumsitem = (ImageView) vi.findViewById(R.id.Albumsitem);
			vi.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}

		if (albums[position].length() > 15) {// 设置专辑名
			holder.album.setText(albums[position].substring(0, 12) + "...");
		} else {
			holder.album.setText(albums[position]);
		}
		if (albums[position].equals("sdcard")) {// 设置艺术家姓名
			holder.artist.setText("未知艺术家");
		} else {
			holder.artist.setText(myMap.get(albums[position]));
		}

		holder.Albumsitem.setImageResource(R.drawable.album);
		return vi;
	}

	class ViewHolder {
		public TextView album, artist;
		public ImageView Albumsitem;
	}

}

三、效果

                                                 

    

    这就是专辑列表,点击去进后会看到下面的歌曲。

  

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值