所谓的mvp,即是(model-处理业务逻辑(主要是数据读写,或者与后台通信(其实也是读写数据)),view-处理ui控件,presenter-主导器,操作model和view)
那么现在直接来看下小demo
首先
Bean
package com.czh.mvptraining.bean; /** * Created by Administrator on 2016/7/27. */ public class User { 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; } }ILoginListener
package com.czh.mvptraining.Util; import com.czh.mvptraining.bean.User; /** * Created by Administrator on 2016/7/27. */ public interface ILoginListener { void loginSuccess(User user); void loginFailed(); }IUserBiz
package com.czh.mvptraining.Util; /** * Created by Administrator on 2016/7/27. */ public interface IUserBiz { void login(String username, String password, ILoginListener iLoginListener); }IUserLoginView
package com.czh.mvptraining.Util; import com.czh.mvptraining.bean.User; /** * Created by Administrator on 2016/7/27. */ public interface IUserLoginView { String getUsername(); String getPassword(); void showLoading(); void hideLoading(); void clearUsername(); void clearPassword(); void toMainActivity(User user); void showFailedError(); }UserBiz
package com.czh.mvptraining.Util; import com.czh.mvptraining.bean.User; /** * Created by Administrator on 2016/7/27. */ public class UserBiz implements IUserBiz { @Override public void login(final String username, final String password, final ILoginListener iLoginListener) { new Thread() { @Override public void run() { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } //模拟登陆成功 if("czh".equals(username)&&"123".equals(password)){ User user = new User(); user.setUsername(username); user.setPassword(password); iLoginListener.loginSuccess(user); }else{ iLoginListener.loginFailed(); } } }.start(); } }UserLoginPresenter
package com.czh.mvptraining.Util; import android.os.Handler; import com.czh.mvptraining.bean.User; /** * Created by Administrator on 2016/7/27. */ public class UserLoginPresenter { private IUserBiz iUserBiz; private IUserLoginView iUserLoginView; private Handler mHandler = new Handler(); public UserLoginPresenter(IUserLoginView iUserLoginView) { this.iUserLoginView = iUserLoginView; this.iUserBiz = new UserBiz(); } public void login(){ iUserLoginView.showLoading(); iUserBiz.login(iUserLoginView.getUsername(), iUserLoginView.getPassword(), new ILoginListener() { @Override public void loginSuccess(final User user) { mHandler.post(new Runnable() { @Override public void run() { iUserLoginView.hideLoading(); iUserLoginView.toMainActivity(user); } }); } @Override public void loginFailed() { mHandler.post(new Runnable() { @Override public void run() { iUserLoginView.showFailedError(); iUserLoginView.hideLoading(); } }); } }); } public void clear(){ iUserLoginView.clearUsername(); iUserLoginView.clearPassword(); } }xml文件
<?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:gravity="center" tools:context=".main.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="20dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="username:" /> <EditText android:id="@+id/act_main_username" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="20dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="password:" /> <EditText android:id="@+id/act_main_password" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="numberPassword" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="20dp"> <Button android:id="@+id/act_main_login" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="login" /> <Button android:id="@+id/act_main_clear" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="clear" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center"> <ProgressBar android:id="@+id/act_main_progress" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="20dp" android:visibility="gone" /> </LinearLayout> </RelativeLayout>MainActivity
package com.czh.mvptraining.main; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.Toast; import com.czh.mvptraining.R; import com.czh.mvptraining.Util.IUserLoginView; import com.czh.mvptraining.Util.UserLoginPresenter; import com.czh.mvptraining.bean.User; public class MainActivity extends AppCompatActivity implements IUserLoginView { private EditText act_main_username; private EditText act_main_password; private ProgressBar act_main_progress; private Button act_main_login; private Button act_main_clear; private UserLoginPresenter userLoginPresenter = new UserLoginPresenter(this); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { act_main_username = (EditText) findViewById(R.id.act_main_username); act_main_password = (EditText) findViewById(R.id.act_main_password); act_main_progress = (ProgressBar) findViewById(R.id.act_main_progress); act_main_login = (Button) findViewById(R.id.act_main_login); act_main_clear = (Button) findViewById(R.id.act_main_clear); act_main_login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { userLoginPresenter.login(); } }); act_main_clear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { userLoginPresenter.clear(); } }); } @Override public String getUsername() { return act_main_username.getText().toString().trim(); } @Override public String getPassword() { return act_main_password.getText().toString().trim(); } @Override public void showLoading() { act_main_progress.setVisibility(View.VISIBLE); } @Override public void hideLoading() { act_main_progress.setVisibility(View.GONE); } @Override public void clearUsername() { act_main_username.setText(""); } @Override public void clearPassword() { act_main_password.setText(""); } @Override public void toMainActivity(User user) { Toast.makeText(this, user.getUsername() + " loginSuccess to MainActivity", Toast.LENGTH_SHORT).show(); } @Override public void showFailedError() { Toast.makeText(this, "loginFailed", Toast.LENGTH_SHORT).show(); } }