【问题标题】:Android View Binding onClickListener not being called未调用Android View Binding onClickListener
【发布时间】:2021-02-18 17:34:42
【问题描述】:

我正在更新一个应用程序,并且我读到现在处理视图的推荐方法是使用视图绑定。我关注了the instructions,但是我遇到了一些问题:

使用以下作品添加点击侦听器:

((LinearLayout) findViewById(R.id.btn_login)).setOnClickListener(v -> {
    Log.v(TAG, "findViewById press");
});

而以下不是

binding.btn_login.setOnClickListener(v -> {
   Log.v(TAG, "View Binding press");
});

文档say it should。我想在一个新项目上尝试这个,以确保它在某种程度上与应用配置无关,但我得到了相同的结果 - 它不起作用。

我正在这样初始化它:

public class Login extends BaseClassFragmentActivity {
    ActivityLoginBinding binding;
    private final String TAG = "[LOGIN]";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        binding = ActivityLoginBinding.inflate(getLayoutInflater());
    }
}

我做错了吗?

【问题讨论】:

  • 好像没问题。将bindingsetContentView 的初始化添加到您的问题中。
  • @HamidSj 感谢您的反馈。刚刚编辑,是的,看来我需要setContentView(binding.getRoot())。这是为什么呢?

标签: android android-viewbinding


【解决方案1】:

考虑您应该在 onCreate 方法中使用 setContentView(binding.getRoot());

【讨论】:

    【解决方案2】:

    感谢@HamidSj 的评论,我注意到我没有打电话给setContentView(binding.getRoot()),而是setContentView(R.layout.activity_login)

    使用binding.getRoot() 解决了这个问题,但我不知道为什么

    【讨论】:

    • 很高兴您的问题得到解决。你能接受我的回答吗?
    【解决方案3】:

    设置setContentView 后初始化绑定将阻止绑定初始化和视图绑定正确。

    您需要先初始化绑定,然后再设置内容视图 与:setContentView(binding.getRoot()).

    【讨论】:

      【解决方案4】:

      充气后调用 setContentView。

      public class Login extends BaseClassFragmentActivity {
              ActivityLoginBinding binding;
              private final String TAG = "[LOGIN]";
          
              @Override
              protected void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(binding.getRoot());
          
                  binding = ActivityLoginBinding.inflate(getLayoutInflater());
                  View view = binding.getRoot();
                  setContentView(view);
              }
          }
      

      当您使用 id btn_login 时,请使用 setOnClickListener 作为

      binding.btnLogin.setOnClickListener(new View.OnClickListener() {
                      @Override
                      public void onClick(View view) {
                          Log.v(TAG, "View Binding press");
                      }
                  });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多