我开始学习数据绑定库 https://developer.android.com/topic/libraries/data-binding/index.html
我无法理解不这样做。
android { .... dataBinding { enabled = true } }
<data>
<variable
name="presenter"
type="ua.com.it_st.ordersmanagers.activiteies.HistoryActivity"/>
</data>
<Button
android:id="@+id/test"
android:text="Start second activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:onClick="@{presenter::onHistoryClick}"
/>
public class HistoryActivity extends MvpAppCompatActivity implements HistoryView {
@InjectPresenter
HistoryPresenter historyPresenter;
ActivityHistoryBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_history);
}
public void onHistoryClick(View view) {
Log.i("test ","test");
binding.test.setText("test");
}
答案 0 :(得分:8)
您忘记将ViewModel设置为绑定。
如果您希望在活动中收到onClick
,则必须执行
binding.setPresenter(this)
虽然我建议在XML文件viewModel
或activity
中调用ViewModel(现在称为presenter)。
如果您希望presenter
收到onClick
,请将布局中的ViewModel类型从活动更改为演示者,在演示者中实施onClick
方法,然后执行
binding.setPresenter(presenter)
答案 1 :(得分:4)
最好的方法是在活动本身中接收onClick,然后将该事件传递到视图模型中的函数(如果有)中。您可以按照以下步骤操作
1-在布局文件中,更改为:-
android:onClick="onClick"
2-在活动文件中,实现View.OnClickListener并将侦听器注册为 binding.test.setOnClickListener(this)
3-将onClick方法替换为
@Override
public void onClick(View view) {
if(view == binding.test){
//any utility method calls then calling the fun of view model
(yourViewModel).onHistoryClick();
}
}