注意: 还将在底部查看已编辑的代码以进行进一步的开发。
我们如何使用数据绑定(特别是通过侦听器绑定)将事件附加/分配给微调器。 这是关于数据绑定用法的article。因此,我正在尝试代码,但未能分配事件。
在 Android Studio 3.2.1 上
activity_parents_reg.xml
<data>
<import type="java.util.ArrayList" />
<variable name="handlers"
type="com.example.myUser.myapplication.custom.MyHandlers"
/>
<variable
name="cities"
type="ArrayList<String>"
/>
<data>
<Spinner
android:id="@+id/dd_city"
android:entries="@{cities}"
android:onClick="@{() -> handlers.onClickFriend()}"
style="@style/dropdown"
/>
MyHandlers.java
public class MyHandlers {
public void onClickFriend(View view) {}
}
ParentsReg.java
// Data binding
ActivityParentsRegBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_parents_reg);
binding.setCities(ConstData.getCitiesList());
binding.setHandlers(new MyHandlers());
这是编译时收到的错误:
Found data binding errors.
****/ data binding error ****msg:cannot find method onClickFriend() in class
com.example.myUser.myapplication.custom.MyHandlers
file:/home/myUser/AndroidStudioProjects/MyApplication/app/src/main/
res/layout/activity_parents_reg.xml loc:103:37 - 103:60
****\ data binding error ****
已编辑:
现在,经过观察和试验。我从代码的另一个角度来确保语法正确。
实际上,微调器出现了问题。也许它需要一个适配器来设置事件。
在这里,解决Button
的代码也几乎没有变化:
// Activity layout changes.
<Button
android:id="@+id/btn_reg_submit"
android:text="Submit"
android:onClick="@{(view) -> handlers.onClickFriend(view)}"
style="@style/btn_secondary"
/>
// MyHandlers class changes.
public class MyHandlers {
private Context _context;
public MyHandlers(Context context) {
_context = context;
}
public void onClickFriend(View view) {
Toast.makeText(_context, "Button Clicked", Toast.LENGTH_SHORT).show();
}
}
// Activity class changes.
binding.setHandlers(new MyHandlers(context));
仍然停留在微调器上。
希望我能得到答案。