如果你有很多类似用途的按钮,有没有办法缩短代码? 必须有办法,但我还没有足够的经验来提出不同的解决方案。 以下面的代码为例:
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]);
}
如果您想出一个解决方案,我真的很感激您能简短地解释一下为什么这种方法有效。感谢您的努力:)
最佳答案
如果您只是想避免 DRY(不要重复自己)原则,您可以在函数中创建监听器并传递 text
参数,例如:
View.OnClickListener createOnClickListener(String text) {
new View.OnClickListener() {
@Override
public void onClick(View v) {
view_input.setText(text);
function();
}
}
}
用法示例
btn_4.setOnClickListener(createOnClickListener("4"))
关于java - 如何缩短类似按钮的 findViewById 和 setOnClickListener ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65410592/