【Android】关于mvp结构的学习与demo

mvp的了解

mvp模式的设计,首先m-model,v-view,p-presenter。

  1. model层主要时进行数据的处理,提供业务逻辑的数据结构(定义类),提供数据的获取(从本地数据库或者远程网络获取数据),提供数据的存储。
  2. view层,主要负责界面的显示,不涉及任何业务逻辑处理,
  3. presenter层,负责业务的逻辑处理,

model和view不能直接通信,presenter层负责充当中间人,实现model层和view层之间的间接通信。
view层和presenter层互相持有对方的引用,实现view层和presenter层之间的通信。

demo

目录:

  • contract
    • testCOntracts
  • model
    • testModel
  • presenter
    • testPresenter
  • view
    • testPage

在contract中定义类,内有三个接口,view,model,presenter,定义相应的方法名。

class TestContracts{
	interface View{
		fun getContext():Context
		fun refreshList(dataList: List<SearchHotBean>)
	}
	interface Presenter{
		fun attach(view: View)
		fun onItemClick(position: Int)
	}
	interface Model{
		fun getHotList(page: Int): List<SearchHotBean>?
	}
}

在testModel.kt中定义请求网络数据的函数,返回网络数据:

override fun getHostList(page:Int):List<T>{
//默认return emptyList();
}

在testPresenter.kt中通过一个子线程来获取网络数据,然后调用view层的refreshList实现数据来时的刷新。设置点击事件等等其他操作。

Override fun attach(view:TestContracts.View){
//开启子线程;
}
override fun onItemClick(position:Int){}

在testView.kt中,要么是activity,要么是fragment,反正跟页面相“联结”,然后持有一个presenter的实例化对象,用该实例化对象的方法获取数据并显示在界面上。

Private val presenter=TestPresenter()
override fun onCreate(savedInstanceState Bundle?){
	super.onCreate(savedInstanceState)
	//各种绑定操作
	presenter.attach(this)
},

另外还有adapter等自定义适配器也可以写在该页面中。

class ListAdapter(private val list : List<SearchHotBean>,var context:Context):RecyclerView.Adapter<ListAdapter.ViewHolder>(){
	override fun onCreateViewHolder(patent: ViewGroup,viewType: Int): ViewHolder{}
	override fun onBindViewHolder(holder: ViewHolder,position: Int){}
	override fun getItemCount(): Int=list.size
	inner class ViewHolder(itemView: View) RecyclerView.ViewHolder(itemView){}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值