Android 未调用视图绑定 onClickListener

Android View Binding onClickListener not being called

我正在更新一个应用程序,我读到现在推荐的处理视图的方法是使用视图绑定。我关注了 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());
    }
}

我是不是做错了什么?

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

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

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

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

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

充气后调用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");
                }
            });