Android MVP模式就是这么回事儿
生活随笔
收集整理的這篇文章主要介紹了
Android MVP模式就是这么回事儿
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
MVP模式
概念就不說了,大家都懂。View層通過Persenter層相互通信,避免了View中大量的業務代碼,而將其提取到Model中。其實簡單的來說,就是通過接口回調,把業務分離出去。提高代碼的可讀性和已維護性。
直接看案例就明白了。
-----------------------------
案例(用戶登錄)
常規的用戶登錄寫法就是Activity(fragment)中獲取用戶名密碼,網絡請求登錄接口,返回是否登錄成功
而MVP的模式就是,要把網絡請求這一部分單獨提取出來放到model層里面,View層也就是我們的Activity只寫頁面相關的操作,
- 創建LoginModel如下:
很簡單,就是一個常規類和常規操作而已,處理具體的登錄網絡請求
- 定義一個接口LoginInterface和LoginPersenter類
LoginInterface中又定義了兩個接口,View和Persenter分別繼承這兩個接口,實現View和Persenter層的交互,具體如下
LoginPersenter.class
package com.cyq.mvppractice.persenter;import com.cyq.mvppractice.contract.LoginInterface; import com.cyq.mvppractice.model.LoginModel;public class LoginPersenter implements LoginInterface.Persenter {//通過構造方法傳入view,相當于傳入了activity和fragmentprivate LoginInterface.View view;public LoginPersenter(LoginInterface.View view) {this.view = view;}/*** 調用model層業務,最終通過view.isLogin(b),通知view層獲取數據** @param username* @param password*/@Overridepublic void goLogin(String username, String password) {boolean isLogin = LoginModel.login(username, password);//回調通知View層view.isLogin(isLogin);} }最后在View中繼承LoginInterface.View接口,實例化LoginInterface.Persenter接口
package com.cyq.mvppractice;import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.view.View; import android.widget.EditText; import android.widget.Toast;import com.cyq.mvppractice.contract.LoginInterface; import com.cyq.mvppractice.persenter.LoginPersenter;public class LoginActivity extends AppCompatActivity implements LoginInterface.View {private LoginInterface.Persenter mPersenter;private EditText usernameEt, passwordEt;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);mPersenter = new LoginPersenter(this);usernameEt = findViewById(R.id.et_username);passwordEt = findViewById(R.id.et_password);findViewById(R.id.btn_login).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {String usernameStr = usernameEt.getText().toString();String passwordStr = passwordEt.getText().toString();if ((!TextUtils.isEmpty(usernameStr)) && (!TextUtils.isEmpty(passwordStr)))mPersenter.goLogin(usernameStr, passwordStr);else {Toast.makeText(LoginActivity.this, "請輸入用戶名或密碼", Toast.LENGTH_SHORT).show();}}});}@Overridepublic void isLogin(boolean islogin) {if (islogin) {Toast.makeText(LoginActivity.this, "登錄成功", Toast.LENGTH_SHORT).show();}} }- 就這么簡單,把網絡請求數據庫操作等復雜業務單獨放到model層中處理,通過接口回調獲得model處理結果返回到View層,也就避免了在View層編寫大量的業務邏輯了
- Xml布局如下,就是兩個Edittext和一個登陸按鈕
- 沒看懂?再認真看一遍,再寫個小demo就ok了,主要是理解其思想
轉載于:https://www.cnblogs.com/chenyangqi/p/9341231.html
總結
以上是生活随笔為你收集整理的Android MVP模式就是这么回事儿的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 她说:我希望你好好写代码
- 下一篇: 重庆社保局密码重置