如果你有很多类似用途的按钮,有没有办法缩短代码?一定有办法,但是我还没有足够的经验来想出一个不同的解决方案。以下面的代码为例:
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]);
}
如果你能想出一个解决办法,我真的很感激你能简短地解释一下为什么这种方法是有效的。感谢您的努力:)
4条答案
按热度按时间6yt4nkrj1#
如果您特别厌倦了不得不这样做,请考虑viewbinding
findViewById
:在示例文档中,它允许您执行以下操作
bgibtngc2#
我们正在使用https://jakewharton.github.io/butterknife/ 所以我们可以写这个
uxhixvfz3#
如果最终目标是避免findviewbyid(),那么可以使用视图绑定。
https://developer.android.com/topic/libraries/view-binding
查看此链接查看绑定的官方文档。
u5i3ibmn4#
如果您只是想避免dry原则(不要重复您自己),您可以在函数中创建侦听器并传递
text
参数如下:示例用法