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