【问题标题】:onClick in Button do not work use Data Binding按钮中的 onClick 不起作用使用数据绑定
【发布时间】:2017-12-30 12:03:31
【问题描述】:

我开始学习数据绑定库 https://developer.android.com/topic/libraries/data-binding/index.html

我不明白怎么做。

机器人{ …… 数据绑定 { 启用 = 真 } }

<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");
    }

【问题讨论】:

    标签: android data-binding binding onclick


    【解决方案1】:

    您忘记将 ViewModel 设置为绑定。 如果您希望在您的活动中收到onClick,您必须这样做

    binding.setPresenter(this)
    

    虽然我建议在您的 XML 文件 viewModel 或 activity 中调用 ViewModel(现在称为 Presenter)。 如果您希望您的presenter 不接收onClick,请将布局中的 ViewModel 类型从活动更改为演示者,在演示者中实现 onClick 方法,然后执行

    binding.setPresenter(presenter)
    

    【讨论】:

      【解决方案2】:

      最好的方法是在活动本身中接收 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();
           }
      }
      

      【讨论】:

      • 这里的binding.test 是什么意思?
      • 我们正在为id为“test”的给定按钮注册监听器......因为它是视图模型实现,所以我们通过绑定(数据绑定)来完成
      • 我知道这是一篇旧帖子,但我很好奇你为什么建议这是“最好”的方式?是不是更容易维护?似乎在布局 xml 文件中设置 onClick 属性涉及更少的代码行
      猜你喜欢
      • 2021-02-08
      • 2019-08-09
      • 2018-12-27
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 2015-02-24
      • 2017-10-23
      相关资源
      最近更新 更多