Adroid之MVC框架_

来源:互联网 发布:负卡路里食物 知乎 编辑:程序博客网 时间:2024/05/20 15:41

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];        }    }}

原创粉丝点击