记我的WiFi音箱之一个网络在线播放及本地播放音乐器(五)

从上篇可以获得音乐的数据集合list,然后根据ListView.setAdapter(adapter)可以把数据放进适配器;

由此可知重点在adapter

ListViewAdapter.java

public class ListViewAdapter extends BaseAdapter{

    MediaPlayer mp=new MediaPlayer();

    private List<MusicData> mFileList;

    private LayoutInflater mLayoutInflater;

    private Boolean playstatus=true; 

    private int flag = 0;

    public ListViewAdapter(Context context, List<MusicData> FileList)
    {
        mFileList = FileList;
        mLayoutInflater = LayoutInflater.from(context);


    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return mFileList.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder holder ;
        if (convertView == null)
        {
             holder=new ViewHolder();       
            convertView = mLayoutInflater.inflate(R.layout.songstyle, null);
            holder.iv=(ImageView)convertView.findViewById(R.id.play);
            holder.displayname = (TextView) convertView.findViewById(R.id.displayname);
            holder.artist = (TextView) convertView.findViewById(R.id.artist);
            convertView.setTag(holder);
        }

        else{
            holder = (ViewHolder) convertView.getTag();
        }


        holder.displayname.setText(mFileList.get(position).mMusicName);
        holder.artist.setText(mFileList.get(position).mMusicAritst);






        return convertView;
    }



     class ViewHolder{
        ImageView iv=null;
        TextView displayname=null;
        TextView artist=null;
    }


}

songstyle.xml

ps:这是listView的每一个布局显示样式

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.song.MainActivity"
    tools:ignore="MergeRootFrame"
    android:descendantFocusability="blocksDescendants"
    android:orientation="vertical" >






<LinearLayout 

        android:layout_width="fill_parent"
        android:layout_height="55dp"
        android:orientation="horizontal"
        >
        <View 
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="0.5"
            />
      <LinearLayout 
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="10.8"
            android:orientation="vertical"
            >

            <TextView 
                android:id="@+id/displayname"
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="0.7"
                android:textColor="@android:color/background_light"
                android:gravity="center_vertical"
                android:textSize="14dp"
                />



            <LinearLayout 
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="0.4"
                >
                <Button 
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="2"
                    android:background="#9966FF"
                    android:text="HQ"
                    android:textColor="#ffffff"
                    android:textSize="12dp"
                                        />
                <View 
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="0.25"
                    />
                <Button 
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="2"
                    android:background="#9966FF"
                    android:text="MV"
                    android:textColor="#ffffff"
                    android:textSize="12dp"
                    />
                <View 
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="0.25"
                    />
                <TextView 
                    android:id="@+id/artist"
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="16"
                    android:gravity="center_vertical"

                    android:textSize="12dp"
                    android:textColor="#ffffff"
                    />
            </LinearLayout>
            <View 
                    android:layout_width="fill_parent"
                    android:layout_height="0dp"
                    android:layout_weight="0.25"
                    />



        </LinearLayout>
        <View 
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="0.3"
            />
        <View 
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="0.3"
            />


    </LinearLayout>




</LinearLayout>

MusicData.java

public class MusicData implements Parcelable{

    public final static String KEY_MUSIC_DATA = "MusicData";

    private final static String KEY_MUSIC_NAME = "MusicName";
    private final static String KEY_MUSIC_TIME = "MusicTime";
    private final static String KEY_MUSIC_PATH = "MusicPath";
    private final static String KEY_MUSIC_ARITST = "MusicAritst";

    public String mMusicName;   
    public int  mMusicTime; 
    public String mMusicPath;
    public String mMusicAritst;


    public MusicData()
    {
        mMusicName = "";
        mMusicTime = 0;
        mMusicPath = "";
        mMusicAritst = "";
    }

    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        // TODO Auto-generated method stub

        Bundle mBundle=new Bundle(); 

        mBundle.putString(KEY_MUSIC_NAME, mMusicName);
        mBundle.putInt(KEY_MUSIC_TIME, mMusicTime);
        mBundle.putString(KEY_MUSIC_PATH, mMusicPath);
        mBundle.putString(KEY_MUSIC_ARITST, mMusicAritst);
        dest.writeBundle(mBundle);
    }

     public static final Parcelable.Creator<MusicData> CREATOR = new Parcelable.Creator<MusicData>()
     {

        @Override
        public MusicData createFromParcel(Parcel source) {
            // TODO Auto-generated method stub
            MusicData Data = new MusicData();

            Bundle mBundle=new Bundle(); 
            mBundle = source.readBundle();
            Data.mMusicName = mBundle.getString(KEY_MUSIC_NAME);
            Data.mMusicTime = mBundle.getInt(KEY_MUSIC_TIME);
            Data.mMusicPath = mBundle.getString(KEY_MUSIC_PATH);
            Data.mMusicAritst = mBundle.getString(KEY_MUSIC_ARITST);


            return Data;
        }

        @Override
        public MusicData[] newArray(int size) {
            // TODO Auto-generated method stub
            return new MusicData[size];
        }

     };
}

SongsActivity.java

public class SongsActivity extends Activity {

    private List<MusicData> list=new ArrayList<MusicData>();
    private MediaPlayer mp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_songs);
        final ListView listview=(ListView)findViewById(R.id.listView);

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

       Cursor cursor=getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, null, null, null);


               if (cursor != null)
                {
                    cursor.moveToFirst();

                    int colNameIndex = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
                    int colTimeIndex = cursor.getColumnIndex(MediaStore.Audio.Media.DURATION);
                    int colPathIndex = cursor.getColumnIndex(MediaStore.Audio.Media.DATA);
                    /**
                     * 直接截取字符串 ,吧作家名取出来
                     *ypc20150708
                     *by1656612697@qq.com 
                     */
                    //int colArtistIndex = cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);


                    int fileNum = cursor.getCount();  
                    for(int counter = 0; counter < fileNum; counter++){        

                        MusicData data = new MusicData();
                        data.mMusicName = cursor.getString(colNameIndex);
                        //System.out.println(data.mMusicName);
                        data.mMusicTime = cursor.getInt(colTimeIndex);
                        //System.out.println(data.mMusicTime);
                        data.mMusicPath = cursor.getString(colPathIndex);
                        //System.out.println(data.mMusicPath);
                        data.mMusicAritst=data.mMusicName.split("-")[0];
                        //data.mMusicAritst = cursor.getString(colArtistIndex);
                        //System.out.println(data.mMusicAritst);

                        list.add(data);
                        cursor.moveToNext();
                    }

                    cursor.close();
                }


        final ListViewAdapter myadapter=new ListViewAdapter(SongsActivity.this, list);


        listview.setAdapter(myadapter);

        listview.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    final int position, long id) {
                // TODO Auto-generated method stub


                    new Thread(new Runnable() {

                        @Override
                        public void run() {      



                            Intent intent=new Intent(SongsActivity.this,PlayActivity.class);

                            intent.putExtra("songName",list.get(position).mMusicName);
                            intent.putExtra("playName",list.get(position).mMusicAritst);
                            intent.putExtra("url", list.get(position).mMusicPath);
                            intent.putExtra("duration", list.get(position).mMusicTime);


                            startActivity(intent);
                            //player.playUrl(url);



                        }
                    }).start();
            }
        });
    }



}   

activity_songs.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.mywifi.SongsActivity"
    tools:ignore="MergeRootFrame"
    android:baselineAligned="false"
    android:background="@drawable/scene">

    <ListView
        android:id="@+id/listView"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1" >
    </ListView>

 </LinearLayout>  

MusicData这个类就是需要在ListView显示的数据,将其封装一个类。
自定义BaseAdapter如上图ListViewAdapter 定义所示,类比即可。难度不大

通过以上几次的讲解,我们已获得了具有本地音乐的list,并将其显示在ListView上,接下来博主将详细的讲解Media类的使用及Service服务的使用,敬请期待

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值