Android--再探MVP模式

來源:互聯網
上載者:User

標籤:tco   add   商務邏輯   stat   登陸   get   encoding   void   ase   

1,上一篇我們已經瞭解了大致的MVP模式,下面再通過這個登入功能的例子 ,我們能過更加容易的掌握MVP模式,再來補充一些閑外話:MVP 是 MVC 的變種,其實是一種升級。要說 MVP 就要說說 MVC,在 MVC 中 Activity 其實是 View層級,但是通常在使用中 Activity即是View也是Controller,並沒有將 View層 和 Controller層 進行分離, 耦合度大大提高,非常不利於項目的管理。MVP 把 Activity 中的 UI邏輯 抽象成 View介面,把 商務邏輯 抽象成 Presenter介面,Model類 還是原來的 Model。

 

2,先來看一下我們這次的簡單的布局檔案,兩個輸入框和兩個按鈕

<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.qianmo.mvpdemo.MainActivity">    <EditText        android:id="@+id/editText_user"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentEnd="true"        android:layout_alignParentLeft="true"        android:layout_alignParentRight="true"        android:layout_alignParentStart="true"        android:layout_alignParentTop="true"        android:hint="Username"/>    <EditText        android:id="@+id/editText_pass"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignEnd="@+id/editText_user"        android:layout_alignParentLeft="true"        android:layout_alignParentStart="true"        android:layout_alignRight="@+id/editText_user"        android:layout_below="@+id/editText_user"        android:hint="Password"/>    <Button        android:id="@+id/button_clean"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentStart="true"        android:layout_below="@+id/editText_pass"        android:layout_marginLeft="35dp"        android:layout_marginStart="35dp"        android:layout_marginTop="69dp"        android:text="clean"/>    <Button        android:id="@+id/button_login"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignBottom="@+id/button_clean"        android:layout_alignEnd="@+id/editText_pass"        android:layout_alignRight="@+id/editText_pass"        android:layout_marginEnd="42dp"        android:layout_marginRight="42dp"        android:text="Login"/></RelativeLayout>

  在建立我們的功能類LoginContract,包含這個登入功能的,view、presenter、model類,這裡推薦使用MVPHelper外掛程式,一步搞定

package com.qianmo.mvpdemo.contract;/** * Created by wangjitao on 2016/10/31 0031. * 用於實現登入功能的實作類別 */public class LoginContract {    public interface View {        public void doClean();        public void loginResult(boolean isSuccess, String messing);    }    public interface Presenter {        public void clean();        public void doLogin(String username, String password);    }    public interface Model {    }}

 model實作類別

package com.qianmo.mvpdemo.model;import com.qianmo.mvpdemo.contract.LoginContract;/** * Created by MVPHelper on 2016/10/31 */public class LoginModelImpl implements LoginContract.Model {    private String username;    private String password;    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }}

persenter的實作類別

package com.qianmo.mvpdemo.presenter;import com.qianmo.mvpdemo.MainActivity;import com.qianmo.mvpdemo.contract.LoginContract;/** * Created by MVPHelper on 2016/10/31 */public class LoginPresenterImpl implements LoginContract.Presenter {    private MainActivity mainActivity;    public LoginPresenterImpl(MainActivity mainActivity) {        this.mainActivity = mainActivity;    }    @Override    public void clean() {        mainActivity.doClean();    }    @Override    public void doLogin(String username, String password) {        if ("wangjitao".equals(username) && "123".equals(password)) {            mainActivity.loginResult(true, "user:" + username + ",pass:" + password);        }else {            mainActivity.loginResult(false, "user:" + username + ",pass:" + password);        }    }}

 最後是我們的UI,也就是我們的Activity

package com.qianmo.mvpdemo;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import com.qianmo.mvpdemo.contract.LoginContract;import com.qianmo.mvpdemo.presenter.LoginPresenterImpl;public class MainActivity extends AppCompatActivity implements LoginContract.View, View.OnClickListener {    private EditText et_username;    private EditText et_password;    private Button btn_clean;    private Button btn_login;    private LoginPresenterImpl mLoginPresenter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        et_username = (EditText) findViewById(R.id.editText_user);        et_password = (EditText) findViewById(R.id.editText_pass);        btn_clean = (Button) findViewById(R.id.button_clean);        btn_login = (Button) findViewById(R.id.button_login);        mLoginPresenter = new LoginPresenterImpl(this);        btn_login.setOnClickListener(this);        btn_clean.setOnClickListener(this);    }    @Override    public void doClean() {        et_username.setText("");        et_password.setText("");    }    @Override    public void loginResult(boolean isSuccess, String messing) {        if (isSuccess) {            Toast.makeText(MainActivity.this, "登陸成功:" + messing, Toast.LENGTH_SHORT).show();        } else {            Toast.makeText(MainActivity.this, "登陸失敗", Toast.LENGTH_SHORT).show();        }    }    @Override    public void onClick(View view) {        switch (view.getId()) {            case R.id.button_clean:                mLoginPresenter.clean();                break;            case R.id.button_login:                mLoginPresenter.doLogin(et_username.getText().toString(), et_password.getText().toString());                break;        }    }}

  ok,這樣的話  感覺一會兒就寫出MVP的小demo了

 

  

 

 

Android--再探MVP模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.