在活动开始时循环分配按钮的快速方法是什么?



我有一段代码在我的主活动中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" />

相关内容

最新更新