日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: a v在线视频| 亚洲国产成人综合 | 欧美黑人精品 | 韩国女主播一区 | 在线无遮挡 | 亚洲 欧美 变态 另类 综合 | 日韩一区电影 | av福利在线观看 | 国内自拍视频在线播放 | 国产一二三在线视频 | www.欧美.com| 日本天堂网在线观看 | 中文字幕人妻一区二区三区在线视频 | 成人av社区| 天天干天天谢 | 久久综合亚洲色hezyo国产 | 精品日韩欧美 | 欧美日韩69 | 久久久三级 | 99夜色| 日色网站| 日本色站 | 欧美精品亚洲 | 小泽玛利亚一区二区三区视频 | 加勒比不卡视频 | 97视频在线看 | 天天躁日日躁狠狠躁伊人 | 黄色大片网址 | 97香蕉久久夜色精品国产 | 午夜影院啊啊啊 | √资源天堂中文在线视频 | 人人看人人干 | 免费亚洲一区 | 美女性高潮视频 | 国产成人亚洲精品无码h在线 | 亚洲欧美a | 日批视频在线免费看 | 无码乱人伦一区二区亚洲 | 国产99免费 | 69久久久久久 | 麻豆91在线播放 | 青青草青青操 | 欧美处女 | 阿v免费在线观看 | 久久盗摄| 欧美日韩免费一区二区三区 | 99热这里有 | 香蕉网av| 中文写幕一区二区三区免费观成熟 | 第一页在线 | 欧洲性生活片 | 国产一二视频 | 国产成人av一区二区 | 91影院在线免费观看 | 日本不卡一区在线 | 高清成人免费视频 | 日韩中文字幕网 | 国产午夜精品理论片 | 黄色片在线免费观看视频 | 亚洲激情啪啪 | 久草综合在线视频 | 国产成人av一区二区三区不卡 | 中文字幕不卡在线观看 | 亚洲欧洲一区二区在线观看 | 天堂一区二区三区四区 | 青草国产 | 天堂久久爱 | 日本中文字幕一区二区 | 欧美性猛交一区二区三区精品 | 欧美激情 在线 | 精品国产av色一区二区深夜久久 | 日韩激情视频网站 | 成人高清视频免费观看 | 日本一区二区三区在线观看 | 黄色avav| 色亚洲欧美 | 午夜婷婷丁香 | 在线观看国产黄色 | 中文有码在线播放 | 欧美一区二区免费在线观看 | 女人扒开屁股让我添 | 蜜臀免费av| 黄色片xxxx | 欧美性一级片 | 精品国产一区二区三区久久狼黑人 | 中国av一级片 | 亚洲男人天堂影院 | 精品久久久在线观看 | 天天干免费视频 | 丰满岳乱妇在线观看中字无码 | 麻豆久久久久久久 | 日韩特级 | 欧美三级三级三级爽爽爽 | 国产粉嫩呻吟一区二区三区 | 欧美性猛交xxxx乱大交 | 性感美女一级片 | 国产精品精品视频 | 久久深夜 | 少妇媚药按摩中文字幕 |