Android開發學習--MVP模式入門

來源:互聯網
上載者:User

標籤:pwd   線程   pass   技術分享   cte   code   progress   text   model   

                              

1、模型與視圖完全分離,我們可以修改視圖而不影響模型
2、可以更高效地使用模型,因為所有的互動都發生在一個地方——Presenter內部
3、我們可以將一個Presenter用於多個視圖,而不需要改變Presenter的邏輯。這個特性非常的有用,因為視圖的變化總是比模型的變化頻繁。
4、如果我們把邏輯放在Presenter中,那麼我們就可以脫離使用者介面來測試這些邏輯(單元測試)

 

下面樣本一個小案例:

項目架構:

首先bean層:

User.java

public class User {    private String username;    private String password;    public String getUsername() {        return username;    }    public String getPassword() {        return password;    }    public void setUsername(String username) {        this.username = username;    }    public void setPassword(String password) {        this.password = password;    }}

 MainActivity.java

public class MainActivity extends AppCompatActivity implements IUserLoginView{    private EditText musername;    private EditText mpasssword;    private Button mlogin;    private Button mclear;    private ProgressBar mpb;    private UserLoginPresenter mUserLoginPresenter = new UserLoginPresenter(this);    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();    }    private void initView() {        musername = (EditText) findViewById(R.id.username);        mpasssword = (EditText) findViewById(R.id.password);        mlogin = (Button)findViewById(R.id.login);        mclear = (Button)findViewById(R.id.clear);        mpb = (ProgressBar) findViewById(R.id.pb);        mlogin.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                mUserLoginPresenter.login();            }        });        mclear.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                mUserLoginPresenter.clear();            }        });    }    @Override    public String getUsername() {        return musername.getText().toString();    }    @Override    public String getPassword() {        return mpasssword.getText().toString();    }    @Override    public void clearUsername() {        musername.setText("");    }    @Override    public void clearPassword() {        mpasssword.setText("");    }    @Override    public void showLoading() {        mpb.setVisibility(View.VISIBLE);    }    @Override    public void hideLoading() {        mpb.setVisibility(View.GONE);    }    @Override    public void toMainActivity(User user) {        Toast.makeText(this, user.getUsername() +                " login success , to MainActivity", Toast.LENGTH_SHORT).show();    }    @Override    public void showFailError() {        Toast.makeText(this,                "login failed", Toast.LENGTH_SHORT).show();    }}
IUserLoginView.java
public interface IUserLoginView {    //操作的目的    String getUsername();    String getPassword();    void clearUsername();    void clearPassword();    //友好的互動    void showLoading();    void hideLoading();    //操作的結果,對應的反饋    void toMainActivity(User user);    void showFailError();}
UserLoginPresenter.java
//Model和View的橋樑  login  clearpublic class UserLoginPresenter {    private IUserLoginView userLoginView;    private IUserBiz userBiz;    private Handler mHandler = new Handler();    public UserLoginPresenter(IUserLoginView userLoginView){        this.userLoginView = userLoginView;        this.userBiz = new UserBiz();    }    public void login()    {        userLoginView.showLoading();        userBiz.login(userLoginView.getUsername(), userLoginView.getPassword(),new OnLoginListener()        {            @Override            public void loginsuccess(final User user)            {                //需要在UI線程執行                mHandler.post(new Runnable()                {                    @Override                    public void run()                    {                        userLoginView.toMainActivity(user);                        userLoginView.hideLoading();                    }                });            }            @Override            public void loginfail()            {                //需要在UI線程執行                mHandler.post(new Runnable()                {                    @Override                    public void run()                    {                        userLoginView.showFailError();                        userLoginView.hideLoading();                    }                });            }        });    }    public void clear()    {        userLoginView.clearUsername();        userLoginView.clearPassword();    }}
IUserBiz.java
public interface IUserBiz {    public void login(String username,String password,OnLoginListener loginListener);}
UserBiz.java
public class UserBiz implements  IUserBiz {    @Override    public void login(final String username,final String password, final OnLoginListener loginListener) {        new Thread(){            @Override            public void run() {                try                {                    Thread.sleep(2000);                } catch (InterruptedException e)                {                    e.printStackTrace();                }                if("name".equals(username)&&"pwd".equals(password)){                    User user = new User();                    user.setUsername(username);                    user.setPassword(password);                    loginListener.loginsuccess(user);                }else{                    loginListener.loginfail();                }            }        }.start();    }}

OnLoginListener.java

public interface OnLoginListener {    void loginsuccess(User user);    void loginfail();}

 

 

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.