Java 如何缩短类似按钮的findViewById和setOnClickListener?
如果你有很多类似用途的按钮,有没有办法缩短代码? 一定有办法,但是我还没有足够的经验来想出一个不同的解决方案。 以以下代码为例:Java 如何缩短类似按钮的findViewById和setOnClickListener?,java,android,Java,Android,如果你有很多类似用途的按钮,有没有办法缩短代码? 一定有办法,但是我还没有足够的经验来想出一个不同的解决方案。 以以下代码为例: btn_0 = findViewById(R.id.btn_0); btn_1 = findViewById(R.id.btn_1); btn_2 = findViewById(R.id.btn_2); btn_3 = findViewById(R.id.btn_3); btn_4 = findViewById(R.id.btn
btn_0 = findViewById(R.id.btn_0);
btn_1 = findViewById(R.id.btn_1);
btn_2 = findViewById(R.id.btn_2);
btn_3 = findViewById(R.id.btn_3);
btn_4 = findViewById(R.id.btn_4);
btn_5 = findViewById(R.id.btn_5);
btn_0.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
view_input.setText("0");
function();
}
});
btn_1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
view_input.setText("1");
function();
}
});
btn_2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
view_input.setText("2");
function();
}
});
btn_3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
view_input.setText("3");
function();
}
});
btn_4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
view_input.setText("4");
function();
}
});
btn_5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
view_input.setText("5");
function();
}
});
有哪些选项可以更高效、更少重复地编写此代码?我见过这样一个选项,但我不知道它是如何工作的:
private Button[] btns = new Button[4];
for (int i = 0; i < 4; i++) {
this.btns[i] = super.findViewById(new int[]{R.id.btn1, R.id.btn2, R.id.btn3, R.id.btn4}[i]);
}
private Button[]btns=新建按钮[4];
对于(int i=0;i<4;i++){
this.btns[i]=super.findviewbyd(新int[]{R.id.btn1,R.id.btn2,R.id.btn3,R.id.btn4}[i]);
}
如果你能想出一个解决方案,我真的很感激你能简短地解释一下为什么这种方法有效。感谢您的努力:)如果您只是想避免DRY原则(不要重复您自己),您可以在函数中创建侦听器并传递
文本
参数,如下所示:
View.OnClickListener createOnClickListener(字符串文本){
新建视图。OnClickListener(){
@凌驾
公共void onClick(视图v){
view_input.setText(文本);
函数();
}
}
}
示例用法
btn_4.setOnClickListener(createOnClickListener(“4”))
考虑一下你是否特别厌倦了必须做的findViewById
:
从示例文档中,它允许您执行以下操作
private ResultProfileBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ResultProfileBinding.inflate(getLayoutInflater());
View view = binding.getRoot();
setContentView(view);
}
binding.getName().setText(viewModel.getName());
binding.button.setOnClickListener(new View.OnClickListener() {
viewModel.userClicked()
});
我们正在使用,所以我们可以写这个
@OnClick({R.id.button0,R.id.button1,R.id.button2,R.id.button3,R.id.button4})
public void setText(View view){
switch(view.getId()){
case R.id.button0:
break;
.....
.....
}
}
如果避免findviewbyid()是您的最终目标,那么您可以使用视图绑定
查看此链接以查看绑定的官方文档。Yep,我在写回答时也有同样的想法。虽然我喜欢这样的外观,但必须依靠第三方库来实现这一点对我来说并不太好,因为这可能只是一个你反复使用的数组