tôi có dưới đây mã trong lập trình androidLàm thế nào tôi có thể tối ưu hóa mã này có chứa một số dòng lặp đi lặp lại?
Button btn1 = (Button) findViewById(R.id.btn1);
Button btn2 = (Button) findViewById(R.id.btn2);
Button btn3 = (Button) findViewById(R.id.btn3);
Button btn4 = (Button) findViewById(R.id.btn4);
Button btn5 = (Button) findViewById(R.id.btn5);
Button btn6 = (Button) findViewById(R.id.btn6);
Button btn7 = (Button) findViewById(R.id.btn7);
Button btn8 = (Button) findViewById(R.id.btn8);
Button btn9 = (Button) findViewById(R.id.btn9);
Và nó tiếp tục cho đến khi btn30
Trong python tôi tối ưu hóa nó bằng mã bên dưới dễ dàng
#is a python syntax (for_statement)
#python work by tab
for i in range(1,31):
#in python not need to declare temp
temp="""Button btn"""+str(i)+"""=(Button)findViewById(R.id.btn"""+str(i)+""")"""
exec(temp)#a default function in python
Trong java lập trình làm thế nào tôi có thể làm điều đó? Hoặc có thể Tôi làm điều đó? Có tồn tại một mã dễ dàng cho nó?
UPDATE 1
SO có hai cách để làm điều đó
Code 1
:
final int number = 30;
final Button[] buttons = new Button[number];
final Resources resources = getResources();
for (int i = 0; i < number; i++) {
final String name = "btn" + (i + 1);
final int id = resources.getIdentifier(name, "id", getPackageName());
buttons[i] = (Button) findViewById(id);
}
Code 2
:
public static int getIdByName(final String name) {
try {
final Field field = R.id.class.getDeclaredField(name);
field.setAccessible(true);
return field.getInt(null);
} catch (Exception ignore) {
return -1;
}
}
final Button[] buttons = new Button[30];
for (int i = 0; i < buttons.length; i++) {
buttons[i] = (Button) findViewById(getIdByName("btn" + (i + 1)));
}
Và khác cách là GidView
Tanks All.
sử dụng getIdentifier để viết cùng mã trong java như trong python –
tôi đi qua cùng một vấn đề khi tôi đã thực hiện một Tic-Tac-Toe và tôi có 9 nút để xử lý. – ShuklaSannidhya
Gợi ý: Nếu bạn đang sử dụng 'exec' trong phiên bản Python, thì bạn đang làm sai điều gì đó. –