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) { 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; 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); }
|
注意两点onAttach(),onDetach();
onCreate(),onCreateView();
第一点:fragment的保留,然后重新加载视图;
第二点:onCreate() 和onCreateView()是有显著区别的;
只有当View已经加载,我们才能找到视图上的某一个button,而onCreate()方法则是用来初始化除View以外的其他内容的
1
| pausebutton =(Button)v.findViewById(R.id.hello_pauseButton);
|