日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android -------- MVP+DataBinding 的使用

發(fā)布時間:2023/12/18 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。