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使用了雙向繫結,格式為@={}
執行後,沒毛病。
相關文章
- DataBinding中xml 點選事件XML事件
- DataBinding點選事件沒有反應事件
- 點選事件的委派事件
- Swift UITableView巢狀UICollectionView點選事件衝突(點選事件穿透)SwiftUIView巢狀事件穿透
- 禁止滑鼠點選事件事件
- RecyclerView中item點選事件View事件
- css禁用滑鼠點選事件CSS事件
- javascript對點選事件和拖動事件的區分JavaScript事件
- QHeaderView的點選和雙擊事件HeaderView事件
- tabbar凸起點選事件處理tabBar事件
- echarts 工具條點選事件控制Echarts事件
- MxDraw雲圖點選事件教程事件
- R::shiny 點選事件-Demo事件
- asp.net中的html控制元件點選事件與伺服器控制元件點選事件的不同ASP.NETHTML控制元件事件伺服器
- Android觸控事件(續)——點選長按事件Android事件
- jquery實現的右鍵滑鼠點選事件jQuery事件
- 點選事件獲取當前li的索引事件索引
- iOS下的點選事件失效解決方法iOS事件
- EditText的點選事件遮蔽鍵盤響應事件
- js實現的按鈕不用人為點選就觸發點選事件JS事件
- RecyclerView-->點選和長按事件View事件
- 中國地圖繪製-點選事件地圖事件
- UITableView 點選事件建立UIAlertControllerUIView事件Controller
- Android--按鈕點選事件Android事件
- view.performClick()觸發點選事件ViewORM事件
- React table 表單裡的內容點選事件React事件
- 使用介面實現RecyclerView中的item點選事件View事件
- 模擬實現超連結的點選事件事件
- iOS不規則控制元件的點選事件iOS控制元件事件
- 【FAQ】關於JavaScript版本的華為地圖服務Map的點選事件與Marker的點選事件存在衝突的解決方案JavaScript地圖事件
- lvgl table的使用(重繪,事件,行選中,點選,蒙版)事件
- 從點選螢幕到事件處理的事件分發原始碼流程事件原始碼
- android 觸控(Touch)事件、點選(Click)事件的區別(詳細解析)Android事件
- 手持裝置點選響應速度,滑鼠事件與touch事件的那些事事件
- Android 架構選型 (MVP+DataBinding)Android架構MVP
- IOS setOnclick - 點選事件完美擴充套件iOS事件套件
- 前端進階之路:點選事件繫結前端事件
- 用Kotlin實現Android點選事件的方法KotlinAndroid事件