所谓MVP(Model-View-Presenter)模式。是将APP的结构分为三层:

view - UI显示层

view 层主要负责:

  1. 提供UI交互
  2. 在presenter的控制下修改UI。
  3. 将业务事件交由presenter处理。
    注意. View层不存储数据,不与Model层交互。

presenter - 逻辑处理层

presenter 层主要负责:

  1. 对UI的各种业务事件进行相应处理。也许是与Model层交互,也许自己进行一些计算,也许控制后台Task,Servic
  2. 对各种订阅事件进行响应,修改UI。
  3. 临时存储页面相关数据。
    注意. Presenter内不出现View引用。

model - 数据层

model层主要负责:

  1. 从网络,数据库,文件,传感器,第三方等数据源读写数据。
  2. 对外部的数据类型进行解析转换为APP内部数据交由上层处理。
  3. 对数据的临时存储,管理,协调上层数据请求。

如图示,里面的activity,presenter,model均为例子:

mvp

将复杂的功能分割为各层内的小问题。各层内功能单一。这样易于功能修改拓展与Debug。
解耦的设计,独立的模块,更有利于分工开发与测试。

简单例子如下

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdAAAAGfCAIAAABgMRTuAAAgAElEQVR4nO3d63MTZ77g8fMHDOfFebFvdrdO1dTULpzaU7WZy+5ZVtiWuXgMZBjfYjxcQryZAiNxiGLAgLEkxwMmQ8wA1hh8wwYseVhb4WIb4japTWV2SPImBWYMTpwLgaFyc6ASW36xVadqX7TUanW3pNbtkS19XZ8XsqxHrXimvtVuief3d7/47/9D9pOf/KSqqspSaAUApGj58uXP/ewXGn9HcAEg7QguAAhiKrjLVhQAAKIhuAAgCMEFAEEILgAIklPBfbujVuO3O36d9VcFALIcDy7NBbB45H5wDWX6lTx3wCdJPvuaVQJWAVgqFl1wm4+f9Bt9uY+fjLs2Wl77uzt6Ir/eOHUmo7/WTW1SEulMbhWApWLRBXdFUdnQ0LCmtv97aGh5YVnctdHOXnt6emLc86M1rn5Jki65ntvePjExISfvR9vbJyYmJiYm+g9ULltRsKlNmpiYaN2+Sv34/7raKd/YdMCnf7D8JbXtXrai4EfLd7dKkvoxy1YUKIeQn1m/CkCOWXTBXbaiYM/BZk1w7QfdZhbGDq6787mWnp+7O59bZhxcX3+oiRG3Vf2VW6nclhdOqL7kB2vSqa6tklfNWoIL5AMlqVVRvrIQ3P/wi196fYNKbb2+wX//81+aWRg7uL8f+JfTQ4W/H/iXZYbBldo3LQ93sHX7qh8tr7RfUm7vbpXPgpevUv7wVy9cFjqxVU5ylYsDcqCDp7prXP2S1H+gUl1wBZcUgNym1Hbr1q1btmypqamprq5+4YUXKisry8vLy8rK5OaKftPsN7vqleBu3vmqyVWxg3vC9/M/Xi044fv5smiXFJaHwhrZUCW+ktS+Sb4hP1i1cNmKgucO+AyD+1zogkO0017lGQgukNsWaXD/4Z+t3ef7/X5/V2//P/yz1eSq2ME9enHFH4Z/dvTiimWJB3dZqJutB1z9khRxMVc+NVadDi8zCq7mZDZ46NBlXPn8l+ACuW2RBnfZioK1m3/r9/vXVv/W/JI413DP/+Pv/7TCff4flyUV3ODVgEs+5adG13AjFhpeww0GWvWOmTq4XMMFctjiDe7f/1Nh3X7n3/9Tofkl0T4WZvZTCrGDGzqHVWqoLLS3Sco7ZuofaS7dRguucklBswpAjlm8wU1CjODqv1I/nOYaLgDEllPBjUYu7Kv1+wqKit3uZoILICvyIrhvnDqTiX9pRnABJCQvggsAiwHBBQBBCC4ACJLO4JrclwEA8hnBBQBBCC4ACEJwAUAQgmvV//u0I7byrL8qALmH4BoE10xzVxZUO31Su63IzCFWVrm9ks9ZVbSywN4ueeoKtKtW2jySz12hux9ALsmd4J4/31dW+UISC80PoFSvIrgAEpU7wZX3LD/5h1NrSkoTWigguKpVBBfIX7kWXL/fPzQ0dOhwo/mF+piaeQzBBZCoHAyu/OUbHHxxR5yMylILrr09tN2tHN+VVW5vKKnK7fANVXBXFoTXTkxMEFwg5+VscOWv+n0H4i5MJbiSUk+bR4psqyVmcOXaKifIdR6J4AI5L2eDe/nyZduePWYWpuWSgvKt2eBGXkPgkgKQD3IwuMPDw80tLQVFZhcSXABi5FpwOzrOrn/+VwktTOmSgscuf1vh8qkuKficVUW6O6NeUgg+FcEFcl3uBHdgYGDLtheTWJjSx8I8ntCAyPBnDypcPvlOr8cT600zm7LW53RxhgvkvtwJbtKSCy4AJIrgAoAgBBcABCG4ACAIwQUAQQguAAhCcAFAkCSDOzExQXABICEEFwAEIbgAIAjBZYgkAEEIbtJDJEPb0ITnlSUzAwJA/iC4SW9eQ3ABJIaPhaUaXNU9BBdALAQ36f1wCS6AxBDcVIOr2uvWeKykRbVDrhTZaAB5heCmObixx0oCyGdJBneNZRXBjXKGq5tyVmBvlyQpNHcHQN5KMrjnNlcTXJPBVX9LdoF8lmRw/2/d/yK4xpcUjMZKOlXDInlXDchbSQZ3cEtVjgU3tc/hqs5wjcZK1nmCb6MpOQaQh5IMbsn/tOR5cAEgUXxKAQAEIbgAIAjBBQBBCC4ACEJwAUAQggsAghBcABCE4AKAIAQXAAQhuAyRBCAIwU1yiCQAJIrgspcCAEFyJLher9dv9DUwMBB3LcEFIEaOBHdH7cuGwX1xR/xKJrcfLgAkKkeCaym0dvf0aGrb1d1tZmHSwdWMhlQPkZR87oqC4HAd+TFeV3XWf0UAsit3gltWXqkJ7qbyCjMLk5z4oBsNqR0iWWBvlyQ6C0CRO8G1FFpPnjql1Lat7aTJVSmM2ImYUaYdYmbzyOe5Wf+1AFgkciq4xWtLhoeH/X7/0NBQ8doSk6tSuYarHg1JcAHEllPBtRRanS633+9vcrrML0n6koJmNKRuTK+9XQp+u7LA7uTaApD3ci24BdbV5zo7C6yrzS9J+mNhmtGQ+qG8K6vcXknSDJQEkLeSDK6yfvny5YsquEngc7gAxCC4ACAIwQUAQQguAAhCcAFAEIILAIIQXAAQhOACgCAEFwAEIbgAIAjBTQnD0ACYR3BTIngAZaI7kK2scntVG0gm/TwA0oLgWi2F1vPn+8oqX0hioeB9GNIeXGX/HeVL3ogHQCYQXKul0CrvWX7yD6fWlJQmtHCRB9fk86wssLcnvp+Zfnc0ALERXKslFFx55/JDhxvNLxQ8gJLgAksawbVaVMGVv3yDg2bG/VpSCK6yVe7ExISySXm75HO6PJqhk+pJlBMTE6HxlLEGVobnqqkGrxk+j+oQmvlsBuMv1UMzd62yhQ/H5WDAHIJrteiCK3/V7zsQd2Gy89CqnZ5gpFbaPKGhv/Z2SQruZR669qoeG2EptNZ5JHVwow2sDD9nKLjRnif0eiKCG0x/VeQ8iyhDMznDBcwjuFaLLriXL1+27dljZmEqlxR0U9Y1mfM5q4q0f/uHvo09P01fyWjPE3p8ZHBtHs07aV5XddyhmQDiIrhWiyq4w8PDzS0tBUVmF6YwYj14Qhp5EprG4PqcVckHN9pVghhDMwHERXCtllBwOzrOrn/+VwktTDK4qqJVuHyxznAjJlFWO32ScXD1lxTkhxldUlA/j2q55pKC+vpD8OpE7KGZAOIiuFZLoXVgYGDLtheTWJjcx8LkVAX/Wvd4YpzhWlR/4EuSz+kyPsO1RL7NZfymmdHzqNZGXp/Vvadn0Q3NtISuivCmGWASwU0JAygBmEdwAUAQggsAghBcABCE4AKAIAQXAAQhuAAgCMEFAEEILgAIQnABQBCCmxKGSAIwj+CmROQQyWgDygAsFQQ3JSL3UiC4wFJHcK1er9dw4sPAwEDctWxeA8A8gmvdUfuyYXDNjDUTPEQSwJJGcK2WQmt3T4+mtl3d3WYWJjvTzN4u+Zy24J6z7bYiZbPa8Cbi+imTmtkQunGTABY5gmu1FFrLyis1wd1UXmFmYQrBDc1usHmULb1VSTWaMhk5vkEzbjLrv0MAcRHcoJOnTim1bWs7aXJVSme4VUUxblv0UyZjTj/L+i8QQFwEN6h4bcnw8LDf7x8aGipeW2JyVYaCazxlkuACSxzBDXO63H6/v8npMr8kU8E1nDJJcIElLsngyn/n7iooyqXgFlhXn+vsLLCuNr8k2SGS8YJrOGWS4AJLHGe4KeFzuADMI7gAIAjBBQBBCC4ACEJwAUAQggsAghBcABCE4AKAIAQXAAQhuAAgCMHNGsfgexov1P8u668KQOYQ3KzRB9dMc9kAF1i6CG7WGAbXkHoVwQWWLoKbklQGUCYXXABLF8FNSSoDKM3ElOACuYTgpirpAZTJBVfZFdeiGzQp76KrzJSscPmCY9N08ygBZAXBTVXSAyhTDK7xoMnQqAg5vsEK6x6W9V8akJ8IbhokN4Ay9TNci37QZMRUtKgPy/pvDMhPBDcNkhtAmeoZrtGgSUuhtc4jeV3VFS6f6kcGDwMgHsFNjyQGUKYaXKNBk8EH+DztoUFn0R4GQDyCmx5JDKBM4XO4oWu4ukGTluBYSUny2IOPj/IwAOIR3KxJMbhZf/0AEkVwlxjlw15ZfyUAEpVkcFcVBdcTXGFW2jx8zABY0pIMbmHxGnk9wQUAk5IMblFx8N0hggsAJiUZXOXteIILACbxphkACEJwAUAQggsAghBcABCE4C5Jb3fUahyxlWf9VQGIjeAuSfrg5lVzVxbY2/kHIFiCCO6SZBhcQ1l/qZlAcLFEEdysSWUAJcEVHFxlgkZGlyDnEdysSWUApZmYEty0HpHgIg0IbjYlPYBSiemGbTvtveP23vEN23ZGe4zaygJ7e2igZHAMhOqe8C7m8qgeW3D6ZLutSN46R1kV+znVO53XeYKb8+pnWcY9SqhZ4edXLVS/VMnwtcV+fsOZm+WrXtAfMeJXFBwZZ3BQ9RyjXatsmiVZ/z8bFgOCm01JD6BUYmrvHZf3zLX3jkd7jELOhLpKmnvCwygL7O2SFIyLvEtZOJoRp5bKFDVL5DmdPOknYqilfuRlvKMEN1NX2hqxMGKGm8XojDL+8xvO3DQ+YvjJDQ9q9JvhDBdaBDfLkhtAaRRcKdpjFOpxO4b3qLqjborxbeUZJiK/1CfOUuSDo428jHYUTbMiX16wmIZHDz0+7vNrZ25GP6IquEYH1f/3ElzoEdwsS24ApRLTjdt22XslW8/4xm27oj1GYS64ESWymAiu4Z/MmgAZzrJMS3Bj/MFu5r9CO3PTXHCjHTR0gmzw4gELwV0MkhhAmdybZnIElb+LnaHzsohLCuFrlDFTWOX2hk8Sw1mp82iHByt/0etnWZoMrjKfLXJh+KKE5uiRry1OcLUzN6MeUXNJweCgTlvkRQaCCx2Cm31JDKBM+mNhyjtXktGbTto3zUwEV/2cyptadR5JfW1U8tgNZ1maPcP1eIxenmpKseYttYSCazRzU39ES+h6SPC/S3dQ+b86uErVa940gxrBXZLy5HO44k8SOS1FRhFcLF4EFzmG4GLxIrjIMQQXAAQhuAAgCMEFAEEILgAIQnABQBCCCwCCEFwAEITg5p18HoYGZBfBzTsMoGQeGrKF4OadPNmHIRqCiywiuEsSAyiTRnCRRQR3SWIAZdIILrKI4C5VDKDM6ABKIBMI7lLFAMqMDqAEMoHgLmEMoMzcAEogEwjuEsYAyswNoAQygeAubQygjHqUpAZQZv1/UOQ2gru0MYAy6lGSGkAJZBTBzTt58jlc3gfDIkRwkZsILhYhgovcRHCxCBFcABCE4AKAIAQXAAQhuAAgCMEFAEEILgAIQnABQBCCiwTk8zA0IHUEFwlIbgAl/wYBkBFcJCC5fRgILiAjuHlH/ABKggvICG7eET+AkuACMoKbjwQPoIw2z9ESZYxj1JGRrqjDKIElgeDmI+EDKGPMc9SOcYw1MjI8JjJiVA+wVBDcPCV0AGW08WLRxzjGHBkZHJ6W9d8hkCiCm6eEDqCMHlz9GEcTIyMJLpYqgpu/BA6gjDHPUTvG0cTISIKLpYrg5i9hAyijzXO0GL8/FndkJMHFUkVwkYA8GUAJZAjBBQBBCC4ACEJwAUAQggsAghBcABCE4AKAIAQXAAQhuAAgCMGFaKXlmxsv3Gx566PWd560vvOk5eb0ob6x0vLNWX9hQKYRXAi1u+XM0VuP++8+u/ZJYPSzhdHPFq59Eui/++zorce7W85k/eUBGUVwIU5dy5nj7355ZSZw/dMFjSszgePvfllHc5HTCC4EWV+xufnWI/9M4OqnC4b8M4HmW482VNaoV9U0bXeMNNTfOOgYaahp2h73KOptboL3VLm9uk0gE1LnkZQde/X7SQLmEVwI0tA72vnhU//Mgn9mwTf57csHmguKimXynf6Zhc4Pnzb03VCvqh87WLhujaXQWrhujWOkIe5RMhRcZWf0Ok94n0kgUQQXghwZfXB5en7o48DQx4EdjsbDHT75ttrl6fkjo9PqVfU3DhrejibTwa1w+QgukkZwIUiT9OhPHwVkxSXrffe/V75Va5Qe69cqFxZkMS4vxA6uZnKPxWiKpXrkpXwBQQmubnQFEzCRGIILQQ6PP/JOB2SrioovTX2vfKvW+NYj/dr6sYNKbZXmGh4lRnCVgT2GD46YYqkaeWmJcg2XCZhIAsGFIA3XH/RPzV98ELj4IFCzu76x54p8W61/ar7h2rR+rRzZ1c+XWAqtq58vkb81PEqs4MrhU/3UcIql5jTWEnlJIZxRJmAicQQXgrzSPdL2wWzf/fm++/Md7/+txrZfedNMvrPv/nzbB7OO3jH9WuXEVnNbT59LzajK0Amsz1kVZYpl7OCG6skETCSB4EKQ0oqafaMPuybnev86b6hrcm7f6MPSihr9WuWSgnJ6G+MTC8roSUvoMqtSQKdNcwXAaIqlyTNcJmAicQQX4tS6Tx8Yf3L27lzXvXmNs3fnDow/qXWfNlxo/k0zmfqqq/pNKuV+5ZMG0aZYaoIbvobLBEykgOBCqFr3GcfI5623Zzvu/HBucu7c5FzHnR9ab886Rj6PVlsgZxBciFZSVr2na3Tvmw/2jn3hGH34in9qT+dISRkflkLuI7gAIAjBBQBBCC4ACEJwAUAQggsAghBcABCE4AKAIAQXAAQhuEjA2x21Gkds5Vl/VcBSQXCRAH1wRTbXcIOu8E8L7O2R290Ciw3BRQIMg2soE0cnuFjqCG7e8Xq9fqOvgYGBuGsJLpAKgpt3dtS+bBjcF3fEr6SZmBJcIBqCm4+6e3o0te3q7jazUInphm077b3j9t7xDdt2RnuMIrghrC24e2y7LTyfJnKSQmizWvWes6r7dSPFNMMfCS4WO4Kbj8rKKzXB3VReYWahElN777hj8D3H4Hv23vFoj1EEh4nJg8VsHmX/78ghNGamKoSexHiAI8HFYkdw89TJU6eU2ra1nTS5yii4UrTHKCL7aHDbcOyYfCIccX/o2yjDHwkuFjuCm6eK15YMDw/7/f6hoaHitSUmVykx3bhtl71XsvWMb9y2K9pjFEkF1+h+VXCNhj8SXCx2BDd/OV1uv9/f5HSZX5Lcm2bxg6u/pKAabK4eF6a/3xIe/khwsdgR3PxVYF19rrOzwLra/JLkPhYWN7iWGG+aha4eSJLP6Qqf2BoNcCS4WOwILhKQ3c/hAksdwQUAQQguAAhCcAFAEIILAIIQXAAQhOACgCAEFwAEIbgAIAjBhWgl5Rv3DR567YPjJ6ZOnZg69dp7ra8OHCwp35j1FwZkGsGFULXHdh2fbLvwxHf16dj1ZzevP7t59enYhSe+4/dO1h7T7oMD5BiCC3Fqj+18Y/qMf/b61adjGv7Z629Mn6k9pt3OPFcxvSI/EVwIUlKx8djkG0OzV998OmJoaPbqsck3Siojri3UNG13jDTU3zjoGGmoadoe9ygVLp+yo416cxzZyiq3N3rm4gruWBb5nJbIHdbNPhXBzUsEF4LsvbS/5/GF4e+uyhyn9v/y1xt/Y9t++LxTubPn8QXH4H71qvqxg4Xr1lgKrYXr1jhGGswcqM4jqYbupD+4Xp9P2UlSJlee4CIuggtBmm6/Njg7fPm7NxWbbVtbrh5X3zM4O9z0/u/Uq+pvHDS8HUOmg9vuCk4GUt0ZsXWkqaciuHmJ4EKQlnuv+2aH1DbbtjZfOaa5s+Xe6/q1yoUFWezLCyaDq1x8ULbfNRpMKQ/7CV4xKF/1gjz7RzmERUmnKqAMxEQ0BBeCvHbv+MDsZbVq2xb3laOaO1+bNAhu/dhBpbZKc6MdyExwlfmV4R8ZD6aUL9oqRVYNWwuOudSOX2MgJmIguBDk0F9cfd8MXPjWp6jevcV5pUV9T983A4dvG4z8kSO7+vkSS6F19fMl8rfRDmQquPLbXKqfRhlMGSxg8DGRIfa6qvVj1hiIiRgILgTZffGV0190nP/mkmz3H/au27R+429+/WpPg3Ln6S867F6Hfq1yYqu5bUgV3IhcWnRXTtWfOogymNI4uMpTOZVjxQouAzERRHAhyLrKDc47LZ1f9XV/c8FQ51d9zjst6yo36NcqlxSU01szlxQshdYKl09ziTbYxyq306b/K14/mDJ6cIPnyKEnj3FJgYGYCCG4EGfr0ZfcU8fOftnT+fV5jbNf9binjm09+pLhQvNvmqk/hyvfU+eR1H+tK49U7pc8dvkeo8GUUYMrHyu81sybZgzEzHsEF0JtOfpS453mEw9P//Gr7o6vezq+7vnjV90nHp5uvNO8JUptgZxBcCHa2rLSXd5/3feXxiP3mg/fad7358adF/esLSvN+gsDMo3gAoAgBBcABCG4ACAIwQUAQQguAAhCcAFAEIILAIIQXIhWWr658cLNlrc+an3nSes7T1puTh/qGyst35z1FwZkGsGFULtbzhy99bj/7rNrnwRGP1sY/Wzh2ieB/rvPjt56vLvlTNZfHpBRBBfi1LWcOf7ul1dmAtc/XdC4MhM4/u6XdTndXKY8gOBCkPUVm5tvPfLPBK5+umDIPxNovvVoQ2WNelWiQyQZHInFjOBCkIbe0c4Pn/pnFvwzC77Jb18+0FxQVCyT7/TPLHR++LSh74Z6VaJDJBkcicWM4EKQI6MPLk/PD30cGPo4sMPReLjDJ99Wuzw9f2R0Wr0q0SGSDI7EYkZwIUiT9OhPHwVkxSXrffe/V75Va5Qe69ea3w+XwZFYzAguBDk8/sg7HZCtKiq+NPW98q1a41uP9GvND5FkcCQWM4ILQRquP+ifmr/4IHDxQaBmd31jzxX5tlr/1HzDtWn9WvNDJBkcicWM4EKQV7pH2j6Y7bs/33d/vuP9v9XY9itvmsl39t2fb/tg1tE7pl9rfogkgyOxmBFcCFJaUbNv9GHX5FzvX+cNdU3O7Rt9WFpRo1+b0BBJBkdi0SK4EKfWffrA+JOzd+e67s1rnL07d2D8Sa37tOFC82+ayRgcicWJ4EKoWvcZx8jnrbdnO+78cG5y7tzkXMedH1pvzzpGPo9WWyBnEFyIVlJWvadrdO+bD/aOfeEYffiKf2pP50hJWXWmjwtkHcEFAHGqonzJPyW4ACAIwQUAQQguAAhCcAFAEIILAIIQXAAQhOACgCAEF2Fvd9RqHLGVZ/1VATmD4CJMH1yaC6QRwUWYYXANZf2lAksRwc01Xq/Xb/Q1MDAQd+3SCq5+b1xgkSO4uWZH7cuGwX1xR/xKmokpwQWSRnBzUHdPj6a2Xd3dZhYqMd2wbae9d9zeO75h285oj1GoxzIa7TwbHNeo7Myt2cfW3ORHe7vkc7o8kRNrQhvURnly/QvI+v80yHMENweVlVdqgrupvMLMQiWm9t5xx+B7jsH37L3j0R6j0I5ljJzGGJlR3WhFs5Mf7e2SJG8NvrLK7ZUn6GiHNcSZFwlkHcHNTSdPnVJq29Z20uQqo+BK0R6jiD2WMXx/1NGKZiY/anqqC66JeZFA1hHc3FS8tmR4eNjv9w8NDRWvLTG5Sonpxm277L2SrWd847Zd0R6jMB/caH/Xm5j8GD+4cedFAllHcHOW0+X2+/1NTpf5Jcm9aRbMZWgUmDLkURdio9GKZic/xguuiXmRQNYR3JxVYF19rrOzwLra/JLkPhYW7JpHGaeoXLTVjTTXjVa0mJ38aBBcS+gNt+CbZvHmRQJZR3ARllJw6RoQD8FFqgguYBLBRaoILmASwQUAQQguAAhCcAFAEIILAIIQXAAQhOACgCAEF2lWWr658cLNlrc+an3nSes7T1puTh/qGyst35z1FwZkHcFFOu1uOXP01uP+u8+ufRIY/Wxh9LOFa58E+u8+O3rr8e6WM1l/eUB2EVykTV3LmePvfnllJnD90wWNKzOB4+9+WUdzkd8ILtJjfcXm5luP/DOBq58uGPLPBJpvPdpQWaNeVdO03THSUH/joGOkoaZpe9yjqHexCd5T5famMM1B/mdyyi66/Hs5ZBTBRXo09I52fvjUP7Pgn1nwTX778oHmgqJimXynf2ah88OnDX031Kvqxw4WrltjKbQWrlvjGGmIe5TMBDe0D1lolkSmf1f8Y+i8RXCRHkdGH1yenh/6ODD0cWCHo/Fwh0++rXZ5ev7I6LR6Vf2Ng4a3o8locC2F1jqPpAxbyxyCm7cILtKjSXr0p48CsuKS9b773yvfqjVKj/VrlQsLshiXF2IH19w8yojJkuWrXtAHl/GXyBCCi/Q4PP7IOx2QrSoqvjT1vfKtWuNbj/Rr68cOKrVVmmt4lBjBNT2PUjPa0uCSAuMvkSEEF+nRcP1B/9T8xQeBiw8CNbvrG3uuyLfV+qfmG65N69fKkV39fIml0Lr6+RL5W8OjxAqu2XmUBhPYQieq2vDFfB7GXyJhBBfp8Ur3SNsHs3335/vuz3e8/7ca237lTTP5zr77820fzDp6x/RrlRNbzW09g7E9keMjTcyj1AdX+0YZ4y+RIQQX6VFaUbNv9GHX5FzvX+cNdU3O7Rt9WFpRo1+rXFJQTm9jfGJBGVJpCV0zDV73NDuPMvHgMv4SaUJwkTa17tMHxp+cvTvXdW9e4+zduQPjT2rdpw0Xmn/TTKbMnVS/hWUxO48y4eAaPo/pwzH+EmEEF+lU6z7jGPm89fZsx50fzk3OnZuc67jzQ+vtWcfI59FqC+QPgos0Kymr3tM1uvfNB3vHvnCMPnzFP7Wnc6SkLOMfbgUWP4ILAIIQXAAQhOACgCAEFwAEIbgAIAjBBQBBCC4ACEJwAUAQgouwtztqNY7YyrP+qoCcQXARpg9ucs0VNqsGWFoILsIMg2so9vMQXMAQwc01Xq/Xb/Q1MDAQd226ggvAEMHNNTtqXzYM7os74lfSTEwJLpA0gpuDunt6NLXt6u42s1CJ6YZtO+294/be8Q3bdkZ7jEzeuVU9V1Hyucsrw/O+9BMSlcm46r23Y0xVAHIGwc1BZeWVmuBuKq8ws1CJqb133DH4nmPwPXvveLTHKJRW6gcsGk5IrHD5gkMVbR6vz1ILSDwAAAkXSURBVKepMJDDCG5uOnnqlFLbtraTJlcZBVeK9hiFUtVwZ5UbhhMSQz+t8/icVfZ2n7vCaOwCkHsIbm4qXlsyPDzs9/uHhoaK15aYXKXEdOO2XfZeydYzvnHbrmiPUZPPTytcPmW8mBLcKBMSI1NrC07ezfrvDcgogpuznC633+9vcrrML0n6TbOVVW6vz9MeOkuNvKSgnZBoKbRWuHxeX/DCgnyb6wnIBwQ3ZxVYV5/r7Cywrja/JOmPhQWnhUfMUgy9aWY0flG+M/h2GR/aRd4guAjjc7hARhFcABBk+fLlP9V9EVwASD+CCwCCEFwAEITgAoAgBBcABCG4ACAIwQUAQQgu0qykfOO+wUOvfXD8xNSpE1OnXnuv9dWBgyXlG7P+woCsI7hIp9pju45Ptl144rv6dOz6s5vXn928+nTswhPf8Xsna49p98EB8g3BRdrUHtv5xvQZ/+z1q0/HNPyz19+YPlN7TLud+ZLAbg9IF4KL9Cip2Hhs8o2h2atvPh0xNDR79djkGyWVEdcWapq2O0Ya6m8cdIw01DRtj3uUCpdP2QdHvbu5bGVVSts81nnC++8ohwsNsCC4SAOCi/TYe2l/z+MLw99dlTlO7f/lrzf+xrb98HmncmfP4wuOwf3qVfVjBwvXrbEUWgvXrXGMNJg5UOSEnnQGd6XNI4U2ObOoRlRk/XeLnEFwkR5Nt18bnB2+/N2bis22rS1Xj6vvGZwdbnr/d+pV9TcOGt6OIYPBjdy9V73JJJAWBBfp0XLvdd/skNpm29bmK8c0d7bce12/VrmwIIt9ecFkcJWLD1L0cZahc1h7uyTJkynUVxXCs9eqmImJ9CC4SI/X7h0fmL2sVm3b4r5yVHPna5MGwa0fO6jUVmlutAOZCa7+5NRwnGVw33T1ZYTwrIrw9QRmYiJdCC7S49BfXH3fDFz41qeo3r3FeaVFfU/fNwOHbxuM/JEju/r5EkuhdfXzJfK30Q5kKrgF9nZJklQ/NR5nqbtKqx88bIkc0cZMTKSC4CI9dl985fQXHee/uSTb/Ye96zat3/ibX7/a06DcefqLDrvXoV+rnNhqbhtSBVeXy8g/5EMnsD5nVYxxltq3xeQzVuW81cJMTKQPwUV6rKvc4LzT0vlVX/c3Fwx1ftXnvNOyrnKDfq1ySUE5vTVzScEixzHy6qoyNthp01w9MBhnaRhc+VO3XtUpKjMxkS4EF2mz9ehL7qljZ7/s6fz6vMbZr3rcU8e2Hn3JcKH5N83Un8OV76nzSOo/8JVHKvdHnqhGjLM0Dq58Xqw+U2YmJtKE4CKdthx9qfFO84mHp//4VXfH1z0dX/f88avuEw9PN95p3hKltkD+ILhIs7Vlpbu8/7rvL41H7jUfvtO878+NOy/uWVtWmvUXBmQdwQUAQRiTDgCCEFwAEITgAoAgBBcABCG4ACAIwQUAQQhuziot39x44WbLWx+1vvOk9Z0nLTenD/WNlZZvzvoLA/IWwc1Nu1vOHL31uP/us2ufBEY/Wxj9bOHaJ4H+u8+O3nq8u+VM1l8ekJ8Ibg6qazlz/N0vr8wErn+6oHFlJnD83S/rstfcTGw1EOM52dkAiwrBzTXrKzY333rknwlc/XTBkH8m0Hzr0YbKGvWqRIc5qnc+jLw/PD3BeKGJAgafPHKeY6zHE1wsEQQ31zT0jnZ++NQ/s+CfWfBNfvvygeaComKZfKd/ZqHzw6cNfTfUqxId5ig3Ub8PobybV4rTZVZWub0+X+x5YolOeGQiJBYDgptrjow+uDw9P/RxYOjjwA5H4+EOn3xb7fL0/JHRafWqRIc5BvvliphkE9yK25XqOK8Kl8/rqq7zxOojwcVSRHBzTZP06E8fBWTFJet9979XvlVrlB7r15rfl1bpl3o78OBABNVYBIMtaDXzwVwezVa2oQEK2vEK6umNA85Dym3J5y6vdHslz65VLzh9kXuTh39kUx4/7n39dZ/uNTOdAUIQ3FxzePyRdzogW1VUfGnqe+Vbtca3HunXmh/mGJ6kYPNIkVMXlYStLKh2ekLlVR4WOT1BNRY3NJwxvFw9sTE8zUHzAiyFBiNw9KPJIh6vimzs82ggvQhurmm4/qB/av7ig8DFB4Ga3fWNPVfk22r9U/MN16b1a80Pc9QMvvW6qsOxizxn1Iwrjz4BN3hbfcocHl+mOw+NPVU3fI9hcJWHFdjbY14pBtKL4OaaV7pH2j6Y7bs/33d/vuP9v9XY9itvmsl39t2fb/tg1tE7pl9rfpij/oTRqYujfD1BGTKmK6BBcNXXDSIybS64llCj5avAEceNvIYrP0A9KRIQgODmmtKKmn2jD7sm53r/Om+oa3Ju3+jD0ooa/Vrzwxx1J4xSeJij0amuMu0xTnBDVx5CRwkObVRPb1xZYHdGTjjXzhzzedpD58vRgqt5GCAGwc1Bte7TB8afnL0713VvXuPs3bkD409q3acNFybxppn8bcRQ8cgLqcH3xDweM2e4dR7tx2+Ve5T335QiKx9Bk98ZC83ujfgMr7rFmo+s1XlifV4YyASCm5tq3WccI5+33p7tuPPDucm5c5NzHXd+aL096xj5PFpt8436YjEgBsHNWSVl1Xu6Rve++WDv2BeO0Yev+Kf2dI6UlJEYqyXyzBcQhuAi79R5JOVzwYBIBBcABCG4ACAIwQUAQQguAAhCcAFAEIILAIIQXAAQhOBmytsdtRpHbOVZf1UAsojgZoo+uDQXyHMEN1MMg2so6y8VgBgENxav1+s3+hoYGIi7luAC0CC4seyofdkwuC/uiF9JMzFtspU3cZEByBsEN47unh5Nbbu6u80sjBbc//fRr75777l/m93/ePTH3/75v3w++B+fvf8L5aehfWbt7ZKkGu0V2lVWNSFRPRAh678lAGYQ3DjKyis1wd1UXmFmYbTgBm5YZtr/07/N7v/riR/ff+PH/8fx774b/m/KT4P7Z4e309bs0h0xGDHrvxwACSG48Z08dUqpbVvbSZOrogX3pz/76Yr//GO1n/7sp8pPtZNgbJ6JyC+vqzo00obxMMASQ3DjK15bMjw87Pf7h4aGiteWmFyV2iWFcHCjjYEJnQuTXWDJMAzu/wczSnic0Rb86AAAAABJRU5ErkJggg==" alt="" />

UserBean.java

package com.example.mvptest.com.example.bean;

/**
* Created by Administrator on 2016/6/2.
*/
public class UserBean {
private String mobile;
private String userpwd; public UserBean(String mobile, String userpwd) {
this.mobile = mobile;
this.userpwd = userpwd;
} public String getMobile() {
return mobile;
} public String getUserpwd() {
return userpwd;
}
}

Model层

IUserModel.java和UserModel.java

public interface IUserModel {

    void setID(int id);
void setMobile(String mobile);
void setUserPwd(String userpwd);
UserBean load(int id);
}
package com.example.mvptest.com.example.model;

import android.util.SparseArray;

import com.example.mvptest.com.example.bean.UserBean;

/**
* Created by Administrator on 2016/6/2.
*/
public class UserModel implements IUserModel {
private String usermobile;
private String userPwd;
private int mID;
private SparseArray<UserBean> mUserArray = new SparseArray<UserBean>(); @Override
public void setID(int id) {
mID = id;
} @Override
public void setMobile(String mobile) {
usermobile = mobile;
} @Override
public void setUserPwd(String userpwd) {
userPwd = userpwd;
UserBean userBean = new UserBean(usermobile, userpwd);
mUserArray.append(mID, userBean);
} @Override
public UserBean load(int id) {
mID = id;
UserBean userBean = mUserArray.get(mID, new UserBean("no data", "not data"));
return userBean;
}
}

View层

package com.example.mvptest.com.example.view;

/**
* Created by Administrator on 2016/6/2.
*/
public interface IUserView {
int getID();
String getMobile();
String getUserPwd();
void setMobile(String mobile);
void setUserpwd(String userpwd);
}

Presenter层

package com.example.mvptest.com.example.presenter;

import com.example.mvptest.com.example.bean.UserBean;
import com.example.mvptest.com.example.model.IUserModel;
import com.example.mvptest.com.example.model.UserModel;
import com.example.mvptest.com.example.view.IUserView; /**
* Created by Administrator on 2016/6/2.
*/
public class UserPresenter {
private IUserView mUserView;
private IUserModel mUserModel; public UserPresenter(IUserView mUserView) {
this.mUserView = mUserView;
this.mUserModel = new UserModel();
} public void saveUser(int id, String mobile, String userpwd) {
mUserModel.setID(id);
mUserModel.setMobile(mobile);
mUserModel.setUserPwd(userpwd);
} public void loadUser(int id) {
UserBean user = mUserModel.load(id);
mUserView.setMobile("bb"+user.getMobile());
mUserView.setUserpwd(user.getUserpwd());
}
}

Activity层实现IUserView接口

public class MainActivity extends AppCompatActivity implements View.OnClickListener, IUserView{
private EditText mobileEdt, pwdEdt;
UserPresenter presenter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); findViewById(R.id.save).setOnClickListener(this);
findViewById(R.id.load).setOnClickListener(this); mobileEdt = (EditText) findViewById(R.id.mobile);
pwdEdt = (EditText) findViewById(R.id.passwd); presenter = new UserPresenter(this);
} @Override
public int getID() {
return 3;
} @Override
public String getMobile() {
return mobileEdt.getText().toString();
} @Override
public String getUserPwd() {
return pwdEdt.getText().toString();
} @Override
public void setMobile(String mobile) {
mobileEdt.setText(mobile);
} @Override
public void setUserpwd(String userpwd) {
pwdEdt.setText(userpwd);
} @Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.save:
presenter.saveUser(3, getMobile(), getUserPwd());
break;
case R.id.load:
presenter.loadUser(3);
break;
default:
break;
}
}
}

复杂例子:
https://github.com/wenhuaijun/SearchPictureTool

 

MVP快速开发框架的更多相关文章

  1. XDroidMvp 轻量级的Android MVP快速开发框架

    XDroidMvp是XDroidAndroid快速开发框架的MVP版本,其使用方式类似于XDroid,大部分源码也来自XDroid. XDroidMvp主要会有这些特性: 无需写Contract! 无 ...

  2. Android快速开发框架ZBLibrary源码分享

    坐标标准库ZBLibrary,是一个MVP架构的Android快速开发框架,提供一套开发标准(UI,Data,Listener)以及模板和工具类并规范代码. 封装层级少,简单高效兼容性好.Androi ...

  3. android 快速开发框架

    https://github.com/lipanquan/LPQRapidDevelopmentFramework 依赖LPQLibrary https://github.com/lipanquan/ ...

  4. android悬浮球实现各种功能、快速开发框架、单词、笔记本、应用市场应用等源码

    Android精选源码 悬浮球,实现一键静音,一键锁频,一键截屏等功能 一个Android快速开发框架,MVP架构 Android QQ小红点的实现源码 android一款单词应用完整app源码 an ...

  5. CRL快速开发框架系列教程十三(嵌套查询)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  6. CRL快速开发框架系列教程十二(MongoDB支持)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  7. CRL快速开发框架系列教程十一(大数据分库分表解决方案)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  8. CRL快速开发框架系列教程十(导出对象结构)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  9. CRL快速开发框架系列教程九(导入/导出数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

随机推荐

  1. 新浪微博授权时出现"关注 *** 的微博"

    基本设置完成后, 保证scope是 "all" 或 至少 包含 "follow_app_official_microblog". 测试时, 保证你的测试账号没有 ...

  2. RatingBar设置显示星星个数

    RatingBar评分控件 项目中遇到问题 marker一下: 关于自定义以及遇到的出现模糊情况 多半是因为切得图除颜色外 不一致的原因 如果大小也不一样,(沃日) 问题是这样的: 我可以通过OnRa ...

  3. Eclipse无法识别Android真机的解决方法

    使用IORegistryExplorer(在Developer Tool)可以查看连接上的USB设备的信息.选择IOUSB,可以看到名为连线的安卓设备,比如小米idVendor是0x2717. ech ...

  4. Red5空项目的理解

    在经过三天的苦恼之后,我终于对Red5的工作流程有点了解了.这样一来对要做的项目总算不会太瞎了.出于个人感受,认为下面所讲述的内容对初学者理解Red5以及基于Red5开发有很大的帮助,因此记录下来. ...

  5. jQuery技术内幕预览版.pdf2

    第二章 构造jQuery对象 jQuery对象是一个类数组对象,含有连续的整型属性.length属性和大量的jQuery方法,$()是jQuery()的缩写 构造函数jQuery() 如果调用构造函数 ...

  6. ReadingNotes@02-12-2013

    ReadingNotes@02-12-2013 */--> pre { background-color: #2f4f4f;line-height: 1.6; FONT: 10.5pt Cons ...

  7. codeforces 358D

    题目链接:http://codeforces.com/contest/358/problem/D #include<cstdio> #include<iostream> #in ...

  8. Linux下动态调整LVM文件系统大小

    LINUX下可以通过LVM动态调整一个已挂载的文件系统大小 LV可以根据需求增大或减小,但是LV改变大小以后,在LV中的文件系统也需要相应的改变大小.这个概念非常重要,如果没有相应的调整LV中文件系统 ...

  9. weekend110(Hadoop)的 第四天笔记

    (2015年1月18日) 课程目录 01-复习 02-hadoop中的序列化机制 03-流量求和mr程序开发 04-hadoop的自定义排序实现 05-mr程序中自定义分组的实现 06-shuffle ...

  10. POJ 3125 Printer Queue

    题目: Description The only printer in the computer science students' union is experiencing an extremel ...