1. 程式人生 > 其它 >MVVM_xml 中引用其它控制元件資料 以及 無法生成ViewDatabinding 類

MVVM_xml 中引用其它控制元件資料 以及 無法生成ViewDatabinding 類

技術標籤:MVC/MVP/MVVM框架databindingmvvm

目錄

1.xml 中引用其它控制元件資料

2.無法生成ViewDatabinding 類

2..2 在ViewModel 中,使用了@Bindable 修飾的函式,返回值為非boolean 型別的, 在函式名注意加上get

2.2 引用其它控制元件資料注意要寫完整的getXXx, 如username.getText()


MVVM 中,xml 佈局檔案用到的大部分資料都是由ViewModel 提供, 也可以引用同一個xml 其它控制元件的資料,

1.xml 中引用其它控制元件資料

如佈局檔案:

<data>
    <variable
        name="loginViewModel"
        type="com.example.mvplogindemo.viewmodel.LoginViewModel" />
</data>

<EditText
    android:id="@+id/username"
    ....
   />

<EditText android:id="@+id/username"
.... />
<Button
    android:id="@+id/login_button"
    android:onClick="@{() -> loginViewModel.verify(username.getText().toString(), password.getText().toString())}"/>

而函式 LoginViewModel. verify(String username, String password), 需要兩個輸入的字串, xml 中使用了兩個EditText 的文字。

2.無法生成ViewDatabinding 類

2..2 在ViewModel 中,使用了@Bindable 修飾的函式,返回值為非boolean 型別的, 在函式名注意加上get

boolean 返回值的函式名可以為 isXXXX(), 其它為 getXXX().

2.2 引用其它控制元件資料注意要寫完整的getXXx, 如username.getText()

如果寫成Koltin 的方式 xxx.text, 則會報以下錯誤

錯誤: 找不到符號
import com.example.mvplogindemo.databinding.AcitivityLoginUsingVmBindingImpl;
^

符號: 類 AcitivityLoginUsingVmBindingImpl
位置: 程式包 com.example.mvplogindemo.databinding

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileDebugJavaWithJavac'. > android.databinding.tool.util.LoggedErrorException: Found data binding error(s):

[databinding] {"msg":"if getId is called on an expression, it should have an id: password.text","file":"app\\src\\main\\res\\layout\\acitivity_login_using_vm.xml","pos":[]}

猜測可能是由於當前載入佈局檔案的Activity 是用Java 語言寫的,所以生成的AcitivityLoginUsingVmBindingImpl 也是Java, 因此要使用Java 的getText().