MVP模式的是什么就不说了,反正用MVP模式写多了就是感觉爽多了,特别是后期改代码、维护什么的就不用那么麻烦了。这边文章就用登录的例子来写一个小小的mvp例子。
布局文件很简单,两个编辑框和一个按钮
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <EditText android:id="@+id/username" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:layout_marginRight="40dp" android:layout_marginLeft="40dp"/> <EditText android:id="@+id/password" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:layout_marginLeft="40dp" android:layout_marginRight="40dp"/> <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="登录" android:textSize="18sp" android:layout_gravity="center_horizontal" android:layout_marginTop="20dp"/> </LinearLayout>
新建一个IMainView接口,主要是登录成功和登录失败的方法。
public interface IMainView { void LoginSuccess(); //登录成功 void LoginFailed(String msg); //登录失败 }
新建一个MainPresenter类,这个就是除了逻辑的类了,所有的逻辑代码放在里面。
public class MainPresenter { private static final String TAG = "MainActivity"; private IMainView view; public MainPresenter(IMainView view){ this.view = view; } //处理登录逻辑 public void login(String username, String password){ if(username.isEmpty() || password.isEmpty()){ view.LoginFailed("账号和密码不能为空"); }else if(password.length() < 6 || password.length() > 20){ view.LoginFailed("密码须在6-20位之间"); }else{ if(username.equals("admin")){ if(password.equals("123456")){ view.LoginSuccess(); }else{ view.LoginFailed("密码错误"); } }else{ view.LoginFailed("用户名错误"); } } } }
MainActivity.java就变得简单多了,上代码
public class MainActivity extends AppCompatActivity implements View.OnClickListener,IMainView{ private EditText username; private EditText password; private Button btn; private String name; private String pwd; private MainPresenter mainPresenter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); username = (EditText) findViewById(R.id.username); password = (EditText) findViewById(R.id.password); btn = (Button) findViewById(R.id.btn); btn.setOnClickListener(this); mainPresenter = new MainPresenter(this); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.btn: name = username.getText().toString(); pwd = password.getText().toString(); mainPresenter.login(name, pwd); break; } } @Override public void LoginSuccess() { Intent intent = new Intent(MainActivity.this, SecondActivity.class); intent.putExtra("name", name); intent.putExtra("password", pwd); startActivity(intent); } @Override public void LoginFailed(String msg) { Toast.makeText(MainActivity.this, msg,Toast.LENGTH_SHORT).show(); }
这样的代码看起是不是舒服多了,自己加点注释,找起来就更加容易了,Activity里面的代码至少不会一堆,看了都烦。