mvc与音频播放

mvc
m:模型
v :视图
c :控制

模型层,可以粗略理解为是属于纯纯的类,绝不与v层有任何关系,就音频播放来说,音频是数据,绝对是属于m层,那么相对应的就有一些控制音频的方法;模型层最接近于java里面的类;

1
2
3
4
5
6
7
8
public class AudioPlayer { //音频播放器和管理它的方法
private MediaPlayer player;
public void stop(){...}
public void play(Context c)
{...}
public void pause()
{...}
}

v层 视图层,主要用于展现视图,有页面,以xml为例,不管有没有人用,都是一个页面,fragment加载就叫做fragment ,activity加载就叫做activity;

c层,最麻烦的一层,我们非常容易的能够看见c层有一大堆的代码,而且都是必须的;

1
2
3
4
protected void onCreate(Bundle savedInstanceState) { //加载xml页面,此处是activity,fragment一布局形式加入activity中
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hello_moon);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class HelloMoonFragment extends Fragment {
private Button playbutton;
private Button stopbutton;
private Button pausebutton;
private AudioPlayer player = new AudioPlayer();
@Override
public void onCreate(Bundle s)
{....}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle s)
{...}
@Override
public void onDestroy()
{...}
}

控制层是连接视图和模型的桥梁;视图中的控件都是死的,只有通过控制层与某些方法连接起来,才能生动,比如说:

1
2
3
4
5
6
7
8
private Button pausebutton; //将视图中的button拿了出来,将它的点击事件与 player.pause();关联起来;
pausebutton =(Button)v.findViewById(R.id.hello_pauseButton);
pausebutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
player.pause();
}
});

当然,除了基本的关联,还有对生命周期中调用各种方法;

1
2
3
4
5
6
public void onCreate(Bundle s)
{
super.onCreate(s);
setRetainInstance(true); //保证其旋转屏幕时fragment不重启,保留fragment
}

这里写图片描述

注意两点onAttach(),onDetach();
onCreate(),onCreateView();
第一点:fragment的保留,然后重新加载视图;

第二点:onCreate() 和onCreateView()是有显著区别的;
只有当View已经加载,我们才能找到视图上的某一个button,而onCreate()方法则是用来初始化除View以外的其他内容的

1
pausebutton =(Button)v.findViewById(R.id.hello_pauseButton);