Android 超简单音乐播放器(二)添加本地音乐 (RecyclerView)(Cursor)
2017-11-13 20:23
531 查看
扫描本地音乐
关于 CursorCursor 是每行的集合。
使用 moveToFirst() 定位第一行。 你必须知道每一列的名称。 你必须知道每一列的数据类型。
Cursor 是一个随机的数据源。 所有的数据都是通过下标取得。 关于 Cursor 的重要方法:
close() 关闭游标,释放资源
copyStringToBuffer(int columnIndex,CharArrayBuffer buffer) 在缓冲区中检索请求的列的文本,将将其存储
getColumnCount()返回所有列的总数
getColumnIndex(String columnName) 返回指定列的名称,如果不存在返回-1
getColumnIndexOrThrow(String columnName) 从零开始返回指定列名称,如果不存在将抛出IllegalArgumentException 异常。
getColumnName(intcolumnIndex) 从给定的索引返回列名
getColumnNames() 返回一个字符串数组的列名
getCount()返回Cursor 中的行数
moveToFirst() 移动光标到第一行
moveToPosition(int position) 移动光标到一个绝对的位置
public List<Song> getLocalMusci(Context context) { List<Song> list1 = new ArrayList<Song>(); int position = 0; Cursor cursor = context.getContentResolver() .query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,null,null,MediaStore.Audio.AudioColumns.IS_MUSIC); for (cursor.moveToFirst();!cursor.isAfterLast(); cursor.moveToNext()) { Song song = new Song(); song.setSinger(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST))); song.setDuration(cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION))); song.setPath(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA))); song.setALLName(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME))); song.setSong(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME))); song.setSize(cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE))); song.setId(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID))); if(song.getSong().contains("-")){ String Name[] = song.getSong().split("-"); String name = Name[1].toString().split(".mp3")[0].indexOf("[mqms2]") > 0 ? Name[1].toString().split(".mp3")[0].substring(0, Name[1].toString().split(".mp3")[0].indexOf("[mqms2]")) : Name[1].toString().split(".mp3")[0]; song.setSong(name); song.setSinger(Name[0]); } if (song.getDuration()/(1000 * 60) >= 1) { //只把1分钟以上的音乐添加到集合当中 song.setPosition(position); list1.add(song); Log.i("songsong","+"+song.getALLName()+song.getPath()); position++; } Log.i("getMUSIC","TTTTTTTTTTT3"+list1.size()); } cursor.close(); if (list == null) { list = list1; } return list1; }
RecyclerView的使用
添加布局
<android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:id="@+id/rv_fragment_local" android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView>
写item的布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/tv_song" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="人海 - 2015 版" android:layout_marginTop="5dp" android:layout_marginLeft="8dp" android:textColor="#000000" android:textSize="16sp"/> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:layout_marginLeft="8dp"> <TextView android:id="@+id/tv_size" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12sp" android:text="6.0M" /> <TextView android:id="@+id/tv_singer" android:layout_marginLeft="5dp" android:layout_toRightOf="@+id/tv_size" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12sp" android:text="燕池" /> </RelativeLayout> <View android:background="#e2dada" android:layout_marginLeft="8dp" android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginTop="3dp"/> </LinearLayout>
写适配器
写一个MusicAdapter,在里面写一个MusicViewHolder 继承 RecyclerView.ViewHolder 会提供一个方法~用来绑定控件public class MusicAdapter { public class MusicViewHolder extends RecyclerView.ViewHolder { public MusicViewHolder(View itemView) { super(itemView); } } }
然后让MusicAdapter继承RecyclerView.Adapter
public class MusicAdapter extends RecyclerView.Adapter<MusicAdapter.MusicViewHolder>{ List<Song> list; private Context context; public MusicAdapter (List<Song> list,Context context) { this.list = list; this.context = context; } @Override public MusicViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new MusicViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_music,parent,false)); }//绑定视图 @Override public void onBindViewHolder(MusicViewHolder holder, int position) { holder.load(list.get(position),context); } @Override public int getItemCount() { return list.size(); } public class MusicViewHolder extends RecyclerView.ViewHolder{ TextView tvSong; TextView tvSinger; TextView tvSize; public MusicViewHolder(View itemView) { super(itemView); tvSinger = itemView.findViewById(R.id.tv_singer); tvSong = itemView.findViewById(R.id.tv_song); tvSize = itemView.findViewById(R.id.tv_size); } public void load (final Song song, final Context context){ tvSinger.setText(song.getSinger()); tvSize.setText(convertFileSize(song.getSize())); tvSong.setText(song.getSong()); if (song.getPath().equals(MusicUtil.getInstance().getPre())){ Log.i(TAG, "RED"+song.getPath()+MusicUtil.getInstance().getPre()); tvSize.setTextColor(Color.parseColor("#da3318")); tvSinger.setTextColor(Color.parseColor("#da3318")); tvSong.setTextColor(Color.parseColor("#da3318")); }else{ tvSize.setTextColor(Color.parseColor("#959595")); tvSinger.setTextColor(Color.parseColor("#959595")); tvSong.setTextColor(Color.parseColor("#000000")); } itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(context, com.music.activity.MusicActivity.class); Bundle bundle = new Bundle(); bundle.putSerializable("songInfo",song); intent.putExtras(bundle); context.startActivity(intent); } }); }
Activity中的代码
musicAdapter = new MusicAdapter(MusicUtil.getInstance().getLocalMusci(getActivity()));//将本地音乐的数据集合添加到适配器里面去 rvFragmentLocal.setLayoutManager(new LinearLayoutManager(getContext())); rvFragmentLocal.setItemAnimator(new DefaultItemAnimator());//默认动画 rvFragmentLocal.setAdapter(musicAdapter);
相关文章推荐
- Android中Recyclerview使用6----添加条目得到点击事件和长按事件(另一种写法,较简单)
- Android用RecyclerView实现动态添加本地图片
- Android 超简单音乐播放器(三)根据歌曲名或者歌手搜索本地音乐(EditText监听)
- Android为RecyclerView添加头部底部的简单方法
- Android给RecyclerView添加头(Header)和尾(Footer)和分标题(Title)——最简单的两种方法
- Android RecyclerView之添加Item分割线
- 用RecyclerView实现动态添加本地图片
- android recyclerview的使用,添加分割线,点击,长按事件
- 给RecyclerView添加头部和尾部最简单的实现方式
- Android RecyclerView item动态添加控件重复问题
- Android RecyclerView添加分隔线 DividerItemDecoration
- Android 中简单使用RecyclerView 和CardView
- Android RecyclerView使用简单介绍
- Android RecyclerView添加分割线
- Android 优雅的为RecyclerView添加HeaderView和FooterView
- android RecyclerView布局真的只是那么简单!
- (转) Android 优雅的为RecyclerView添加HeaderView和FooterView
- android中RecyclerView的简单使用(四)——上下拉刷新的实现
- Android 优雅的为RecyclerView添加HeaderView和FooterView
- 【Android】让HeaderView也参与回收机制,自我感觉是优雅的为 RecyclerView 添加 HeaderView (FooterView)的解决方案