MVC模式(Model-View-Controller)是一种架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
Model层实现系统中的业务逻辑。 View层用于与用户的交互。 Controller层是Model与View之间沟通的桥梁。
使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式,而C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新
使用MVC模式可以将显示部分与数据部分分离,这样当更换视图或模型时可以不影响对方,
更有利于程序的维护。
1) 视图层(View):一般采用XML文件进行界面的描述,使用的时候可以非常方便的引入。当然这里需要进行Java和JavaScript之间的通信,Android提供了它们之间非常方便的通信实现。
2) 控制层(Controller):Android的控制层的重任通常落在了众多的Acitvity,不要在Acitivity中写代码,要通过Activity交割Model业务逻辑层处理,这样做的另外一个原因是Android中的Acitivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。
3) 模型层(Model):对数据库的操作、对网络等的操作都应该在Model里面处理,当然对业务计算等操作也是必须放在的该层的。就是应用程序中二进制的数据。
MVC, 即Model-View-Controller, 基于页面逻辑的修改要多于业务逻辑, 分离两种逻辑减少类代码的修改.
- Model: 即数据层, 负责处理业务逻辑, 监听网络与数据库接口.
- View: 即界面(UI)层, 显示来源于Model的数据.
- Contoller: 即逻辑层, 传递用户的交互和更新Model的数据.
首先视图接受用户输入请求,然后将请求传递给控制器,控制器再调用某个模型来处理用户的请求,在控制器的控制下,再将处理后的结果交给某个视图进行格式化输出给用户。另外,View是可以直接访问Model来进行数据的处理的
public class WelcomeActivity extends AppCompatActivity { private ImageView iv; Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); } }; int time = 3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_welcome); iv = (ImageView) findViewById(R.id.welcome_iv); handler.postDelayed(new Runnable() { @Override public void run() { time --; if(time == 0){ Intent intent = new Intent(WelcomeActivity.this,ShouyeActivity.class); startActivity(intent); } handler.postDelayed(this,1000); } },1000); } @Override protected void onDestroy() { handler.removeCallbacksAndMessages(null); super.onDestroy(); } }
每个层次都分离开·这样显得代码清晰。
下面的是工具类的包:
public class NoScrollViewPager extends ViewPager { private boolean isCanScroll = true; public NoScrollViewPager(Context context) { super(context); } public NoScrollViewPager(Context context, AttributeSet attrs) { super(context, attrs); } /** * 设置其是否能滑动换页 * @param isCanScroll false 不能换页, true 可以滑动换页 */ public void setScanScroll(boolean isCanScroll) { this.isCanScroll = isCanScroll; } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return isCanScroll && super.onInterceptTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent ev) { return isCanScroll && super.onTouchEvent(ev); } }
这是其中的一个Fragment
public class Frag_weitao extends Fragment { String [] lis = {"关注","发现"}; private List<Fragment> list; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = View.inflate(getActivity(), R.layout.frag_weitao,null); TabLayout tb = view.findViewById(R.id.frag_weitao_tab); ViewPager vp = view.findViewById(R.id.frag_weitao_vp); initData(); MyFragWeiTaoPagerAdapter adapter = new MyFragWeiTaoPagerAdapter(getChildFragmentManager()); vp.setAdapter(adapter); tb.setupWithViewPager(vp); tb.setTabMode(TabLayout.MODE_SCROLLABLE); // vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { // @Override // public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // // } // // @Override // public void onPageSelected(int position) { // // switch (position){ // case 0: // new Frag_weitao_faxian(); // break; // case 1: // new Frag_weitao_guanzhu(); // break; // } // // } // // @Override // public void onPageScrollStateChanged(int state) { // // } // }); return view; } private void initData() { for (int i = 0; i <lis.length ; i++) { list = new ArrayList<>(); list.add(new Frag_weitao_faxian()); list.add(new Frag_weitao_guanzhu()); } } class MyFragWeiTaoPagerAdapter extends FragmentPagerAdapter{ public MyFragWeiTaoPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return list.get(position); } @Override public int getCount() { return list.size(); } @Override public CharSequence getPageTitle(int position) { return lis[position]; } } }