Android MVP模式简单易懂的介绍方式 (三)
讲完M和P,接下来就要讲V了。View也很好理解,就是把UI需要做的事情,通过接口暴露出来。那么UI要做什么事情,无非就是对UI控件的操作(这里是清空输入)、还有登陆成功或者失败的操作嘛。因此,我们可以这样写。
public interface ILoginView { void onClearText(); void onLoginReuslt(Boolean res,int code); }
一样,有了接口,当然需要一个类来实现他。那么谁来实现这个接口呢?当然是我们的Activity。Activity实现了ILoginView接口后,由于逻辑的调用我们都在钱面写完了。因此,只需要写好UI处理即可。为了和ILoginPresenter 通讯,所以Activity需要一个ILoginPresenter ,然后,由ILoginPresenter 去和ILoginView进行通讯,从而实现UI与业务的分离
public class LoginActivity extends AppCompatActivity implements ILoginView,View.OnClickListener{ private EditText et_name; private EditText et_password; ILoginPresenter iLoginPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.setTitle("登陆"); findViewById(R.id.bt_login).setOnClickListener(this); findViewById(R.id.bt_clear).setOnClickListener(this); et_name = findViewById(R.id.et_username); et_password = findViewById(R.id.et_password); iLoginPresenter = new ILoginPresenterCompl(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.bt_clear: iLoginPresenter.clear(); break; case R.id.bt_login: iLoginPresenter.doLogin(et_name.getText().toString(),et_password.getText().toString()); break; default: } } @Override public void onClearText() { et_name.setText(""); et_password.setText(""); } @Override public void onLoginReuslt(Boolean res, int code) { switch (code){ case 0: break; case 1: Toast.makeText(this,"登陆成功",Toast.LENGTH_SHORT).show(); break; case -1: Toast.makeText(this,"用户名错误",Toast.LENGTH_SHORT).show(); break; case -2: Toast.makeText(this,"密码错误",Toast.LENGTH_SHORT).show(); break; default: } } }
为了方便大家,顺便把布局文件也贴上,那么到这里,我们整一个MVP就完成了。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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:orientation="vertical" tools:context="com.himarking.myapplication.MainActivity"> <LinearLayout android:orientation="vertical" android:layout_marginTop="100dp" android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:layout_margin="10dp" android:layout_marginTop="200dp" android:id="@+id/et_username" android:layout_width="match_parent" android:layout_height="wrap_content" /> <EditText android:layout_margin="10dp" android:id="@+id/et_password" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> <LinearLayout android:layout_marginTop="200dp" android:layout_margin="10dp" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/bt_login" android:text="登陆" android:layout_weight="1" android:layout_width="0dp" android:layout_height="wrap_content" /> <Button android:id="@+id/bt_clear" android:text="清空" android:layout_weight="1" android:layout_width="0dp" android:layout_height="wrap_content" /> </LinearLayout> </LinearLayout>