databinding的點選事件
dataBinding框架讓我們不再需要使用findViewById了
1、開發環境
android studio 3.2.1
gradle 4.6
classpath 'com.android.tools.build:gradle:3.2.1'
compileSdkVersion 28
jdk 1.8
eg.使用dataBinding開發,需要依賴jdk 1.8的lamba表示式,
新增方式一如圖:
新增方式二
在build.gradle檔案中新增如下
android{
compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
}
2、開始開發了
新增dataBinding
在build.gradle檔案中新增如下
android{
dataBinding { enabled true }
}
然後同步,開發環境準備好了。
2.1佈局檔案的格式
以<layout></layout>為根佈局
固定格式如下
<layout 你所有的名稱空間的內容都放這裡>
<data>
</data>
<根佈局>
你的佈局
</根佈局>
</layout>
示例如下:
<?xml version="1.0" encoding="utf-8"?> <layout 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"> <data> </data> <android.support.constraint.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView
android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </android.support.constraint.ConstraintLayout> </layout>
接著就可以到activity頁面編寫程式碼了。
首先MainActivity繫結佈局
新建專案的時候會自動生成一個佈局,如R.layout.activity_main,當使用dataBinding後修改了佈局檔案是以layout為根佈局,此時會生成一個以佈局檔名+Binding的類,即ActivityMainBinding類,沒有生成就編譯一下專案。然後繫結佈局,程式碼如下:
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);以前的
setContentView(R.layout.activity_main);就可以去掉了。這樣,我們就可以通過binding變數來獲取佈局中的所有帶有id的控制元件了。比如binding.tv,這就是Hello World!所在的控制元件TextView。
其次編寫一個控制類MainPresenter
這個類可以新增到佈局中的data標籤中,程式碼如下
<data> <variable name="presenter" type="com.rixtdqqq.databindingdemo.MainPresenter" /> </data>
presenter就是給MainPresenter這個類起的一個變數名,此時就可以在MainActivity類中使用binding設定presenter了,程式碼如下
binding.setPresenter(new MainPresenter());這樣就關聯起來了。
再次給控制元件新增點選事件,此時需要用到lamba表示式了
1、在MainPresenter類中新增點選事件,方法必須是public void 的格式
public void click() { Toast.makeText(App.getInstance(), "Hello World.", Toast.LENGTH_SHORT).show(); }
2、點選 事件寫好後,在佈局的控制元件中新增onClick事件
android:onClick="@{() -> presenter.click()}"
其中@{}是繫結表示式的格式,這樣,一個簡單的點選事件就完成了。
public class App extends Application { private static App instance; @Override public void onCreate() { super.onCreate(); instance = this; } public static App getInstance() { return instance; } }
將App新增到AndroidManifest中
執行後,沒毛病。
進階:
點選事件中新增引數
在佈局中新增一個EditText控制元件,將其中的輸入顯示出來。
1、新增EditText控制元件
<EditText android:id="@+id/et" android:layout_width="0dp" android:layout_height="wrap_content" android:maxLines="1" android:text="@={input}" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/tv" />
2、在data標籤下增加一個變數,用來儲存EditText的輸入
<variable name="input" type="String" />
3、將EditText的輸入做為引數傳入click事件
android:onClick="@{() -> presenter.click(input)}"
4、改造MainPresenter中的點選事件方法,增加引數
public void click(String input) { Toast.makeText(App.getInstance(), input, Toast.LENGTH_SHORT).show(); }
特別注意:EditText使用了雙向繫結,格式為@={}
執行後,沒毛病。
相關文章
- 點選事件的委派事件
- javascript對點選事件和拖動事件的區分JavaScript事件
- tabbar凸起點選事件處理tabBar事件
- echarts 工具條點選事件控制Echarts事件
- MxDraw雲圖點選事件教程事件
- 用Kotlin實現Android點選事件的方法KotlinAndroid事件
- RecyclerView-->點選和長按事件View事件
- lvgl table的使用(重繪,事件,行選中,點選,蒙版)事件
- React table 表單裡的內容點選事件React事件
- 使用介面實現RecyclerView中的item點選事件View事件
- 【FAQ】關於JavaScript版本的華為地圖服務Map的點選事件與Marker的點選事件存在衝突的解決方案JavaScript地圖事件
- 中國地圖繪製-點選事件地圖事件
- IOS setOnclick - 點選事件完美擴充套件iOS事件套件
- MVVM 中的DatabindingMVVM
- DataBinding系列(四):DataBinding進階之路
- Android中點選事件的四種寫法詳解Android事件
- iOS全埋點解決方案-UITableView和UICollectionView點選事件iOSUIView事件
- iOS全埋點解決方案-控制元件點選事件iOS控制元件事件
- React滑鼠點選事件物件中的幾個用到的屬性React事件物件
- 移動端點選事件延遲的誕生消亡史事件
- 3D地圖的定時高亮和點選事件3D地圖事件
- MVVM模式--DataBinding的使用MVVM模式
- Android:DataBinding的一二事Android
- Flutter自定義折線圖並新增點選事件Flutter事件
- 用JS點選事件做一個簡單的計算器JS事件
- Android Jetpack - DataBindingAndroidJetpack
- vue中在父元件點選按鈕觸發子元件的事件Vue元件事件
- day31-33 關於點選事件內的判斷語句事件
- 簡單實現UILabel之協議類點選事件UI協議事件
- RecyclerView使用指南(三)—— 新增分割線和點選事件View事件
- 小程式如何避免多次點選,重複觸發事件事件
- ASPxGridView中Command列自定義按鈕點選事件概要View事件
- 如何使用 JavaScript 程式碼建立虛擬滑鼠點選事件JavaScript事件
- 怎樣用純CSS實現禁止滑鼠點選事件?CSS事件
- 【MAUI】為 Label、Image 等控制元件新增點選事件UI控制元件事件
- js禁用頁面所有輸入框以及點選事件JS事件
- select下拉選項,點選時,change事件事觸發多次,請求多次。事件
- Android架構元件-DataBinding的使用Android架構元件