框架模式MVC在安卓中的实践
2018-06-22 05:01:04来源:未知 阅读 ()
我们采用ListView来演示我们的MVC模式,目录结构:
实体类:包含了书的名字和图片信息
public class Book { //书名 private String name; //书的图片 private int image; public Book(String name, int image) { this.name = name; this.image = image; }
模型类(Model层):通常是对本地数据库的操作或者是通过网络请求获取网络数据的操作
我们在Model里面模拟了一个本地数据库,并提供了增删改查的方法
public class BookModel { private static List<Book> list = new ArrayList<>(); /** * 模拟本地数据库 */ static { list.add(new Book("Java从入门到精通", R.drawable.java)); list.add(new Book("Android从入门到精通", R.drawable.android)); list.add(new Book("Java从入门到精通", R.drawable.java)); list.add(new Book("Android从入门到精通", R.drawable.android)); } /** * 添加书本 * @param name * @param image */ public void addBook(String name, int image) { list.add(new Book(name, image)); } /** * 删除书本 */ public void deleteBook( ) { list.remove(list.size() - 1); } /** * 查询数据库所有书本 * @return */ public List<Book> query() { return list; } }
控制器(Controller层):根据Model层的方法,加上我们的业务逻辑处理,对外提供方法并暴露接口
看delete这个方法,判断List是否为空(业务逻辑),使用mode.deleteBook()(Model层方法),通过listener.onComplete()(暴露接口)
public class BookController { private BookModel mode; public BookController() { mode = new BookModel(); } /** * 添加书本 * @param listener */ public void add(onAddBookListener listener) { mode.addBook("JavaWeb从入门到精通", R.drawable.javaweb); if (listener != null) { listener.onComplete(); } } /** * 删除书本 * @param listener */ public void delete(onDeleteBookListener listener) { if(mode.query().isEmpty()){ return; }else{ mode.deleteBook(); } if (listener != null) { listener.onComplete(); } } /** * 查询所有书本 * @return */ public List<Book> query() { return mode.query(); } /** * 添加成功的回调接口 */ public interface onAddBookListener { void onComplete(); } /** * 删除成功的回调接口 */ public interface onDeleteBookListener { void onComplete(); } }
视图(View层):我们操作Controller获取List数据填充到ListView中,同时可以添加书本和删除书本
public class BookActivity extends AppCompatActivity implements View.OnClickListener { private BookController bookController; private ListView lv_book; private List<Book> list; private BookAdapter adapter; private Button bt_add, bt_delete; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_book); lv_book = (ListView) findViewById(R.id.lv); bt_add = (Button) findViewById(R.id.bt_add); bt_delete = (Button) findViewById(R.id.bt_delete); bt_add.setOnClickListener(this); bt_delete.setOnClickListener(this); bookController = new BookController(); list = bookController.query(); adapter = new BookAdapter(this, list); lv_book.setAdapter(adapter); } @Override public void onClick(View v) { switch (v.getId()) { //添加书本按钮 case R.id.bt_add: bookController.add(new BookController.onAddBookListener() { @Override public void onComplete() { adapter.notifyDataSetChanged(); } }); break; //删除书本按钮 case R.id.bt_delete: bookController.delete(new BookController.onDeleteBookListener() { @Override public void onComplete() { adapter.notifyDataSetChanged(); } }); break; } } }
效果图
源码
github:https://github.com/AndroidHensen/Design-Mode
https://blog.csdn.net/qq_30379689/article/details/52909656
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:PHP源码分析-变量
下一篇:简单理解php的socket编程
- PHP设计模式之工厂模式详解 2020-02-19
- Laravel框架实现redis集群的方法分析 2020-01-17
- thinkPHP框架中执行原生SQL语句的方法 2020-01-16
- 详解Yii2框架实现登录、退出及自动登录功能的方法 2019-12-15
- 分析php中注册器模式类用法实例 2019-12-02
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash