android MVP模式使用

model 负责数据获取

class ListModel {
    fun getListData(page:Int,listener:ListLoadingListener){
        Handler(Looper.getMainLooper()).postDelayed({
            var arrayList = ArrayList<ListBean>()
            for (item in 1..10){
                arrayList.add(ListBean("pageList=>${item}", "page*item",page.toString()))
            }
            listener.loadSuccess(arrayList)
        },1000)
    }
}

interface ListLoadingListener{
    fun loadSuccess(listData:ArrayList<ListBean>)
    fun loadError()
}

viewI 界面的动作接口

interface ListViewI {
    fun getCurrPage():Int
    fun setCurrPageData(listData:ArrayList<ListBean>)
    fun toRefreshAt()
    fun toUpLoadAt()
}

presenter 处理view跟model的逻辑

class ListPresenter {

    var iView:ListViewI
    var listModel: ListModel
    constructor(iView:ListViewI){
        this.iView = iView
        listModel = ListModel()
    }

    fun getListData(){
    	//model获取数据;而请求条件、处理结果是通过iView在activity的实现去处理
        listModel.getListData(iView.getCurrPage(),object :ListLoadingListener{
            override fun loadSuccess(listData: ArrayList<ListBean>) {
                iView.setCurrPageData(listData)
            }

            override fun loadError() {
                //TODO error handler
            }
        })
    }
}

activity 实现动作接口

class ListActivity : BaseActivity(), ListViewI {
    private var currNum: Int = 1;
    var pageList = ArrayList<ListBean>();
    private lateinit var listAdapter:ListAdapter
    private lateinit var mListPresenter:ListPresenter
    private lateinit var moreModule: BaseLoadMoreModule
    val mThis by lazy { this }
    override fun setLayout(): Int {
        return R.layout.activity_list
    }

    override fun initView() {

        listAdapter = ListAdapter(R.layout.item_list,pageList)
        recyclerView.layoutManager = LinearLayoutManager(this)
        recyclerView.adapter = listAdapter

        refreshLayout.setOnRefreshListener {
            toRefreshAt()
            refreshLayout.isRefreshing = false
        }
        moreModule = listAdapter.loadMoreModule
        moreModule.setOnLoadMoreListener {
            toUpLoadAt()
        }
        listAdapter.setOnItemClickListener { adapter, view, position ->
            Toast.makeText(mThis, "go go go-> $position", Toast.LENGTH_SHORT).show()
        }
        mListPresenter = ListPresenter(this)
        mListPresenter.getListData()
    }

    override fun getCurrPage(): Int {
        return currNum
    }

    override fun setCurrPageData(listData:ArrayList<ListBean>)  {
        //刷新界面
        if (currNum==1){
            pageList.clear()
            pageList.addAll(listData)
            listAdapter.notifyDataSetChanged()
        }else{
            listAdapter.addData(listData)
        }
        moreModule.loadMoreComplete()
    }

    override fun toRefreshAt() {
        currNum = 1
        mListPresenter.getListData()
    }

    override fun toUpLoadAt() {
        currNum++
        mListPresenter.getListData()
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值