android -------- MVP+DataBinding 的使用
生活随笔
收集整理的這篇文章主要介紹了
android -------- MVP+DataBinding 的使用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
今天來說說MVP+DataBinding?的使用
?
以一個登錄案例來講解
?
?
?
布局:(ConstraintLayout 作為根布局)
<layout><data><variablename="onClick"type="com.zhangqie.mvplogin.LoginActivity.OnViewClick" /></data><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".LoginActivity"><TextViewandroid:id="@+id/tv1"android:layout_width="wrap_content"android:layout_height="45dp"android:gravity="center"android:text="賬號:"android:textColor="@android:color/black"android:textSize="16dp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintHorizontal_bias="0.2"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.4" /><EditTextandroid:id="@+id/et_name"android:layout_width="222dp"android:layout_height="45dp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toRightOf="@+id/tv1"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.4" /><TextViewandroid:id="@+id/tv2"android:layout_width="wrap_content"android:layout_height="45dp"android:gravity="center"android:text="密碼:"android:textColor="@android:color/black"android:textSize="16dp"app:layout_constraintHorizontal_bias="0.2"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toBottomOf="@+id/tv1" /><EditTextandroid:id="@+id/et_pwd"android:layout_width="222dp"android:layout_height="45dp"app:layout_constraintLeft_toRightOf="@+id/tv2"app:layout_constraintTop_toBottomOf="@+id/et_name" /><Buttonandroid:id="@+id/btn_login"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="25dp"android:onClick="@{onClick.OnClickCommand}"android:text="登錄"app:layout_constraintTop_toBottomOf="@+id/et_pwd" /></android.support.constraint.ConstraintLayout> </layout>?
?BaseActivity.Java
public abstract class BaseActivity<D extends ViewDataBinding,V,T extends BasePresenter<V>> extends AppCompatActivity{protected D viewDataBinding;protected T p;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);viewDataBinding = DataBindingUtil.setContentView(this, setMainLayout());p = createPresenter();p.attachView((V)this);initView();initBeforeData();}protected abstract T createPresenter();/**** 初始化布局*/protected abstract int setMainLayout();/*** 初始化View*/protected abstract void initView();/*** 初始化先前數(shù)據(jù)*/protected abstract void initBeforeData();/**** 跳轉(zhuǎn)Activity* @param mClass*/protected void openActivity(Class<?> mClass) {openIntent(new Intent(this, mClass));}/*** 彈出toast 顯示時長short** @param msg*/protected void showToastShort(String msg) {if (!TextUtils.isEmpty(msg)) {Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();}}protected void showToastShort(int msg) {Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();}protected void openIntent(Intent intent) {startActivity(intent);}protected void openForResultActivity(Intent intent, int requestCode){startActivityForResult(intent,requestCode);}@Overrideprotected void onDestroy() {super.onDestroy();if (p != null){p.detachView();}}}?
?
Activity.java
public class LoginActivity extends BaseActivity<LoginMainBinding,IView,LoginPresenter> implements IView {@Overrideprotected LoginPresenter createPresenter() {return new LoginPresenter();}@Overrideprotected int setMainLayout() {return R.layout.login_main;}@Overrideprotected void initView() {viewDataBinding.setOnClick(new OnViewClick());}@Overrideprotected void initBeforeData() {}@Overridepublic void showLoading(String msg) {showToastShort(msg);}public class OnViewClick {public void OnClickCommand(View view) {switch (view.getId()) {case R.id.btn_login:p.showLogin(viewDataBinding.etName.getText().toString(),viewDataBinding.etPwd.getText().toString());break;}}} }?
?效果圖:
? ? ? ? ? ? ??
?
源碼下載:?https://github.com/DickyQie/android-databinding
?
總結(jié):
-
減少各層之間耦合,易于后續(xù)的需求變化,降低維護成本。
-
Presenter層獨立于Android代碼之外,可以進行Junit測試。
-
接口和類較多,互相做回調(diào),代碼臃腫。
-
Presenter層與View層是通過接口進行交互的,接口粒度不好控制。
?
有不足之處,望指正
?
轉(zhuǎn)載于:https://www.cnblogs.com/zhangqie/p/9779302.html
總結(jié)
以上是生活随笔為你收集整理的android -------- MVP+DataBinding 的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 专题:固体力学中应力与应变分析详解(7.
- 下一篇: easyUI 绑定右键菜单在数据行上显示