我有一段代码在我的主活动中onCreate()
开头(super.onCreate
后第 5 行(调用,我怀疑它正在减慢启动(和调试(。
这是一个循环,用于为每个按钮分配 10 个按钮以及 Click 侦听器。这是片段-
//expostate is a boolean and is always false at start of activity
//checkLength(Screen) will always return true at start of activity
//expression is of String data type
//Screen is a TextView
for(int i=0; i<10; i++){
String btnid = "btn" + i;
int resourceid = getResources().getIdentifier(btnid, "id", getPackageName());
numbuttons[i] = findViewById(resourceid);
final String value = String.valueOf(i);
numbuttons[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (checkLength(Screen) && !expostate) {
if (expression.equals("0")) {
expression = "";
Screen.setText("");
}
Screen.append(value);
expression += value;
presentop = false;
}
else if (checkLength(Screen) && expostate) {
if (expression.equals("0")) {
expression = "";
Screen.setText("");
}
Screen.append(getSuperscript(value));
expression += value;
presentop = false;
}
}
});
}
有没有更好/更快的方法来完成同样的任务?
我建议的一个改进是针对onClick()
方法。
你的逻辑可以这样写:
public void onClick(View view) {
if (expression.equals("0")) {
expression = "";
Screen.setText("");
}
if (checkLength(Screen)) Screen.append(expostate ? getSuperscript(value) : value);
expression += value;
presentop = false;
}
如果按钮的 ID 在运行时是已知的,你最好只用 ID 创建一个数组,而不是执行 getResources(( 调用。
因此,我发现一种不那么笨拙的方法是将android:onClick
分配给 10 个按钮中的每一个以及提取值的android:tag
。
守则:-
public void onNumpress(View v){
buttonFlash((Button) v);
String value = getResources().getResourceEntryName(v.getId()).replace("btn", "");
if (expression.equals("0")) {
expression = "";
Screen.setText("");
}
if (checkLength(Screen)) Screen.append(expostate ? getSuperscript(value) : value);
expression += value;
presentop = false;
}
其中一个按钮的 xml 布局:-
<Button
android:id="@+id/btn0"
android:layout_width="78dp"
android:layout_height="85dp"
android:layout_marginBottom="8dp"
android:background="@color/colorPrimary"
android:text="@string/btn0"
android:textColor="@color/colorSecondary"
android:textSize="24sp"
android:onClick="onNumpress"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/btnans" />