为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

POPMUISE 2023-09-13 10:49:05
我有一段代码在我的主活动的开始处onCreate()(之后的第 5 行super.onCreate)被调用,我怀疑它会减慢启动(和调试)。这是一个循环,用于分配 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 TextViewfor(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;                    }                }            });        }有没有更好/更快的方法来完成同样的任务?
查看完整描述

3 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

我建议的改进是方法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;

}


查看完整回答
反对 回复 2023-09-13
?
智慧大石

TA贡献1946条经验 获得超3个赞

因此,我发现一种不太笨拙的方法是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" />


查看完整回答
反对 回复 2023-09-13
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

如果按钮的 ID 在运行时已知,那么最好只创建一个包含 ID 的数组,而不是执行 getResources() 调用。



查看完整回答
反对 回复 2023-09-13
  • 3 回答
  • 0 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信