重新做一个简单的小项目,在一年后,争取进入android技术开发的行列中。

至于一直未能加入技术开发行业的原因,本博客将会进行展开,其实也是总所周知的原因。

本篇文章其实挺突然的,从笔记就突然变成了一篇分享出来的博客,记录自己的“重学成长”。

引言

从音乐播放器开始做起。Why MusicPlayer?

其中涉及列表展示,多线程,媒体等等,以及一年前自己开始写了一个较为大而全的项目,其中就有音乐播放器的功能

本文为第一部分,仅列出将本地音乐显示在列表里的基本步骤,以及把业务逻辑写在fragment中的一些坑。

后续在本文的知识点中,会增加相应链接,跳转到我的笔记

所需知识点

Java:javaBean类、遍历(主要为while循环)、泛型、集合(List<>)

Android:

列表:ListView或RecycleView及生成:Adapter、ViewHolder

媒体:ContentProvider、ContentReserver、MediaStore

开始编写

界面

使用ListView或RecycleView编写基本列表

编写音乐播放控制条(上一曲下一曲)

编写音乐条目的单个item

主要业务逻辑

注:findViewById相关步骤省略,若音乐的界面写在fragment内,前面需要getView()

基本步骤

加入权限

AndroidManiFest.xml中加入读写权限:

Bean

编写MusicBean类,(根据单个item中包含的内容为参考),生成getter与setter方法与构造方法,作为List的泛型对象存在被传入

数据源

初始化数据源:MusicBean

List = new arrayList()

Adapter相关

编写适配器:

创建Adapter对象继承自Adapter(根据使用的列表而定)、

创建ViewHolder类继承自ViewHolder(根据使用的列表而定)

并重写三个方法并设置适配器:

3.1. 在ViewHolder里使用itemView与绑定ID对控件进行查找

3.2. 定义Context与List数据源,并使用构造函数传递(为什么?)

public class LocalMusicAdapter extends RecyclerView.Adapter {

Context context;

List musicDataBean;

public LocalMusicAdapter(Context context, List musicDataBean) {

this.context = context;

this.musicDataBean = musicDataBean;

}

3.3 创建Adapter对象继承自Adapter:泛型中传入ViewHolder,重写三个方法:

public LocalMusicViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

//创建ViewHolder(对象)并返回,作用:生成与初始化每一个ViewHolder

View view = LayoutInflater.from(context).inflate(R.layout.item_music,parent,false);

LocalMusicViewHolder holder = new LocalMusicViewHolder(view);

return holder;

}

@Override

public void onBindViewHolder(@NonNull LocalMusicViewHolder holder, int position) {

//查找并绑定数据展示

LocalMusicBean musicBean = musicDataBean.get(position); //拿到Bean

holder.songName.setText(musicBean.getSongName());

holder.artistName.setText(musicBean.getArtistName());

holder.albumName.setText(musicBean.getAlbumName());

}

@Override

public int getItemCount() { //有多少条目就返回多少条目

return musicDataBean.size();

}

布局管理器

创建布局管理器,设置为何种布局(横向滑动/瀑布流等),使用LinearLayoutManager并设置

加载文件

使用ContentResolver-获取本地音乐URL地址

使用Cursor(游标)进行查询(resolver.query()方法),之后进行遍历

TODO:Fragment的坑

如果将业务逻辑以Fragment的形式写在App项目中:

需考虑应用使用何种导航形式:侧滑菜单/底部Tab/ViewPager+Fragment,以及不同的展现方法。

确定好应用结构之后:

TODO:将fragment放进MainActivty.java中。

直接写Context报错

fragment中无法直接调用findViewById与Context。(为什么?)

TODO:什么是context?他在App中开发的作用?

localMusicAdapter = new LocalMusicAdapter(getContext(),musicDataBean);

mRecycleView.setAdapter(localMusicAdapter);

LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext(),LinearLayoutManager.VERTICAL,false);

mRecycleView.setLayoutManager(linearLayoutManager);

即使如此,到现在也是半成品,所以这也是未能入行的原因之一:没有一个完整的项目,于是精简就开始了。 ↩︎ ↩︎

我的笔记大都是用语雀进行记录。 ↩︎ ↩︎

这也是段落Fragment的坑的内容。 ↩︎ ↩︎