DataBinding 填坑總結
阿新 • • 發佈:2019-01-03
Problem 1:
根據提示檢視xml檔案的157行:
這裡是一個自定義佈局,它告訴我<.custom.CenteredIconButton android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/already_friends" android:textColor="@color/primary" android:drawableStart="@drawable/selector_ic_check" android:drawablePadding="@dimen/activity_vertical_margin_half" android:visibility="@{viewModel.isFriend.get ? View.VISIBLE : View.GONE}" android:onClick="@{viewModel.changeFriendshipStatus}" style="@style/Widget.AppCompat.Button.Borderless"/>
android:onClick="@{viewModel.changeFriendshipStatus}"
changeFriendshipStatus方法沒找到所以不能解析,檢查之後才發現是包名寫錯了,多寫了一個點:.custom.CenteredIconButton 應該替換為 custom.CenteredIconButton;要仔細。
Problem 2:
還是看下程式碼:
看出問題了嗎?<ProgressBar android:layout_width="0dp" android:layout_height="@dimen/small_progressbar_size" android:layout_weight="1" android:layout_gravity="center" android:visibility="@{!viewModel.isLoaded.get}"/>
android:visibility="@{!viewModel.isLoaded.get}"應該修改為
android:visibility="@{!viewModel.isLoaded.get ? View.VISIBLE : View.GONE}"
Problem 3 :
佈局檔案:
<android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" app:srcCompat="@drawable/ic_edit" app:layout_behavior="custom.ScrollAwareFABBehavior" app:onClick="@{viewModel.edit}" style="@style/FAB"/>
ViewModel中的方法:
/**
* Fab 按鈕點選事件
*/
public void edit() {
AppUtilities.showInputDialog(context, status);
}
這有什麼問題?乍看之下無比正常,其實應該把app:onClick="@{viewModel.edit}" 替換成 android:onClick="@{viewModel.edit}"
Problem 4:
新的風暴已經出現,怎麼能夠挺住不前
這是因為 自己定義的方法的方法簽名必須與實際的listener回撥方法的簽名保持一致 (即方法的引數型別與個數要一致);也就是說edit()和OnClick()引數不一致。我們給FAB控制元件新增點選事件時都是
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
...
}
});
所以我們應該把
/**
* Fab 按鈕點選事件
*/
public void edit() {
AppUtilities.showInputDialog(context, status);
}
替換為加上View引數
/**
* Fab 按鈕點選事件
*/
public void edit(View view) {
AppUtilities.showInputDialog(context, status);
}
problem 5:
新增一行import,引入View進來:
<data>
<import type="android.view.View" />
<variable
name="employee"
type="com.example.Employee"/>
</data>
以上問題都是親測有效。