onClick in Button不起作用使用数据绑定

时间:2017-07-24 19:19:03

标签: android data-binding binding onclick

我开始学习数据绑定库 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");
    }

2 个答案:

答案 0 :(得分:8)

您忘记将ViewModel设置为绑定。 如果您希望在活动中收到onClick,则必须执行

binding.setPresenter(this)

虽然我建议在XML文件viewModelactivity中调用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();
     }
}