简体   繁体   English

我的 android 工作室应用程序中的按钮没有触发事件

[英]the buttons in my android studio application are not triggering events

I am using Android Studio 3.2 and My app is showing up but the buttons are not triggering actions please suggest any code changes so that they would trigger events on the app我正在使用 Android Studio 3.2 并且我的应用程序正在显示,但按钮没有触发操作请建议任何代码更改,以便它们触发应用程序上的事件

The MainActivity code is: MainActivity 代码是:

package com.example.myfalconcalculator;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView expression;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


     Button num1 = findViewById(R.id.num1);
     expression =  findViewById(R.id.expression);
     Button num2 = findViewById(R.id.num2);
     Button num3 = findViewById(R.id.num3);
     Button num4 = findViewById(R.id.num4);
     Button num5 = findViewById(R.id.num5);
     Button num6 = findViewById(R.id.num6);
     Button num7 = findViewById(R.id.num7);
     Button num8 = findViewById(R.id.num8);
     Button num9 = findViewById(R.id.num9);
     Button num0 = findViewById(R.id.num0);
     Button plus = findViewById(R.id.plus);
     Button minus = findViewById(R.id.minus);
     Button equalsTo = findViewById(R.id.equalsTo);
     Button closeBrace = findViewById(R.id.closeBrace);
     Button openBrace = findViewById(R.id.openBrace);
     Button clear = findViewById(R.id.clear);
     Button delete = findViewById(R.id.delete);
     Button exponential = findViewById(R.id.exponential);
     Button divideBy = findViewById(R.id.divideBy);


    num1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "1");
        }

    });
    num2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "2");
        }
    });

    num3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "3");
        }
    });

    num4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "4");
        }
    });

    num5.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "5");
        }
    });

    num6.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "6");
        }
    });

    num7.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "7");
        }
    });

    num8.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "8");
        }
    });

    num9.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "9");
        }
    });

    num0.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "0");
        }
    });

    plus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "+");
        }
    });

    minus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "-");
        }
    });

    exponential.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "*");
        }
    });

    divideBy.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "/");
        }
    });

    equalsTo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            SimpleMathSolver mathSolver = new SimpleMathSolver(expression.getText().toString());
            try {
                expression.setText(String.valueOf(mathSolver.solve()));
            } catch (Exception e) {
                expression.setText("Input Not Valid");
            }
        }
    });

    closeBrace.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + ")");
        }
    });

    openBrace.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText(expression.getText().toString() + "(");
        }
    });

    clear.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            expression.setText("");
        }
    });

    delete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String tempExpression = expression.getText().toString().substring(0, expression.getText().toString().length()-1);
            expression.setText(tempExpression);
        }
    });

    }

}

The Main Activity file is depending on another file: Main Activity 文件依赖于另一个文件:

package com.example.myfalconcalculator;

import java.util.Scanner;
import java.util.Stack;

public class SimpleMathSolver {
    private String inputExp;

    private final char PLUS = '+';
    private final char MINUS = '-';
    private final char MULTIPLY = '*';
    private final char DIVIDE = '/';
    private final char OPENBRACE = '(';
    private final char CLOSEBRACE = ')';

    public SimpleMathSolver(String inputExp) {
    this.inputExp = inputExp;
    }

    public int solve() throws Exception {
    String withoutBraceInputExp = solveBraces(this.inputExp);
    return solveMath(withoutBraceInputExp);
    }

    private String solveBraces(String inputExp) throws Exception {
    String output = inputExp;

    int closeBraceIndex = output.indexOf(CLOSEBRACE);
    while (closeBraceIndex >= 0) {
        int openBraceIndex = output.substring(0, closeBraceIndex).lastIndexOf(OPENBRACE);
        String solveStr = output.substring(openBraceIndex + 1, closeBraceIndex);
        int value = solveMath(solveStr);
        output = output.substring(0, openBraceIndex) + value
                + output.substring(closeBraceIndex + 1, output.length());
        closeBraceIndex = output.indexOf(CLOSEBRACE);
    }
    return output;
    }

    private int solveMath(String inputExp) throws Exception {
    Stack<Integer> numberStack = new Stack<Integer>();
    Stack<Character> symbolStack = new Stack<Character>();

    updateStacks(inputExp, numberStack, symbolStack);
    solveMathSymbol(numberStack, symbolStack, DIVIDE);
    solveMathSymbol(numberStack, symbolStack, MULTIPLY);
    solveMathSymbol(numberStack, symbolStack, MINUS);
    solveMathSymbol(numberStack, symbolStack, PLUS);

    return numberStack.pop();
    }

    private void solveMathSymbol(Stack<Integer> numberStack, Stack<Character> symbolStack, char symbol) {
    Stack<Integer> tempNumberStack = new Stack<Integer>();
    Stack<Character> tempSymbolStack = new Stack<Character>();

    while (symbolStack.size() > 0) {
        char ch = symbolStack.pop();
        if (ch == symbol) {
            int pop1 = numberStack.pop();
            int pop2 = numberStack.pop();
            int out = 0;
            switch (symbol) {
                case PLUS:
                    out = pop2 + pop1;
                    break;
                case MINUS:
                    out = pop2 - pop1;
                    break;
                case MULTIPLY:
                    out = pop2 * pop1;
                    break;
                case DIVIDE:
                    out = pop2 / pop1;
                    break;
            }
            numberStack.push(out);
        } else {
            tempSymbolStack.push(ch);
            int numpop = numberStack.pop();
            tempNumberStack.push(numpop);
        }
    }
    while (tempSymbolStack.size() > 0) {
        char charpop = tempSymbolStack.pop();
        symbolStack.push(charpop);

        int numpop = tempNumberStack.pop();
        numberStack.push(numpop);
    }
    }

    private void updateStacks(String inputExp, Stack<Integer> numberStack, Stack<Character> symbolStack)
        throws Exception {
    int number = 0;

    for (int i = 0; i < inputExp.length(); i++) {
        char ch = inputExp.charAt(i);

        if (Character.isDigit(ch)) {
            number = number * 10 + Integer.parseInt(String.valueOf(ch));
        } else {
            numberStack.push(number);
            number = 0;

            if (ch == PLUS || ch == MINUS || ch == MULTIPLY || ch == DIVIDE) {
                symbolStack.push(ch);
            } else {
                throw new Exception("Unknown Math Symbol " + ch);
            }
        }
    }

    numberStack.push(number);
    }

    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    String retryOp = "N";
    do {
        System.out.println("Enter Math Expression");
        String inputExp = scanner.nextLine();

        SimpleMathSolver solver = new SimpleMathSolver(inputExp);
        try {
            System.out.println("Result: " + solver.solve());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        System.out.println("Do you want to try this again");
        retryOp = scanner.nextLine();
    } while (retryOp.equalsIgnoreCase("Y"));
    scanner.close();
    System.exit(0);
    }
}

this is the activity main.xml file:这是活动 main.xml 文件:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <Button
    android:id="@+id/closeBrace"
    android:layout_width="74dp"
    android:layout_height="76dp"
    android:layout_marginEnd="6dp"
    android:layout_marginRight="6dp"
    android:layout_marginBottom="1dp"
    android:text=")"
    app:layout_constraintBottom_toTopOf="@+id/equalsTo"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/openBrace"
    app:layout_constraintTop_toBottomOf="@+id/divideBy" />

    <Button
    android:id="@+id/openBrace"
    android:layout_width="74dp"
    android:layout_height="76dp"
    android:layout_marginBottom="1dp"
    android:text="("
    app:layout_constraintBottom_toTopOf="@+id/equalsTo"
    app:layout_constraintEnd_toStartOf="@+id/closeBrace"
    app:layout_constraintStart_toEndOf="@+id/num9"
    app:layout_constraintTop_toBottomOf="@+id/exponential" />

    <Button
    android:id="@+id/divideBy"
    android:layout_width="74dp"
    android:layout_height="76dp"
    android:layout_marginEnd="6dp"
    android:layout_marginRight="6dp"
    android:text="/"
    app:layout_constraintBottom_toTopOf="@+id/closeBrace"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/exponential"
    app:layout_constraintTop_toBottomOf="@+id/minus" />

    <Button
    android:id="@+id/exponential"
    android:layout_width="74dp"
    android:layout_height="76dp"
    android:text="*"
    app:layout_constraintBottom_toTopOf="@+id/openBrace"
    app:layout_constraintEnd_toStartOf="@+id/divideBy"
    app:layout_constraintStart_toEndOf="@+id/num6"
    app:layout_constraintTop_toBottomOf="@+id/plus" />

    <Button
    android:id="@+id/plus"
    android:layout_width="74dp"
    android:layout_height="76dp"
    android:text="+"
    app:layout_constraintBottom_toTopOf="@+id/exponential"
    app:layout_constraintEnd_toStartOf="@+id/minus"
    app:layout_constraintStart_toEndOf="@+id/num3"
    app:layout_constraintTop_toBottomOf="@+id/delete" />

    <Button
    android:id="@+id/minus"
    android:layout_width="74dp"
    android:layout_height="76dp"
    android:layout_marginEnd="6dp"
    android:layout_marginRight="6dp"
    android:text="-"
    app:layout_constraintBottom_toTopOf="@+id/divideBy"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/plus"
    app:layout_constraintTop_toBottomOf="@+id/delete" />

    <Button
    android:id="@+id/num0"
    android:layout_width="252dp"
    android:layout_height="76dp"
    android:layout_marginStart="3dp"
    android:layout_marginLeft="3dp"
    android:layout_marginBottom="5dp"
    android:text="0"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toStartOf="@+id/equalsTo"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/num8" />

    <Button
    android:id="@+id/num5"
    android:layout_width="84dp"
    android:layout_height="76dp"
    android:layout_marginBottom="2dp"
    android:text="5"
    app:layout_constraintBottom_toTopOf="@+id/num8"
    app:layout_constraintEnd_toStartOf="@+id/num6"
    app:layout_constraintStart_toEndOf="@+id/num4"
    app:layout_constraintTop_toBottomOf="@+id/num2" />

    <Button
    android:id="@+id/num4"
    android:layout_width="84dp"
    android:layout_height="76dp"
    android:layout_marginStart="5dp"
    android:layout_marginLeft="5dp"
    android:layout_marginBottom="1dp"
    android:text="4"
    app:layout_constraintBottom_toTopOf="@+id/num7"
    app:layout_constraintEnd_toStartOf="@+id/num5"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/num1" />

    <Button
    android:id="@+id/num6"
    android:layout_width="84dp"
    android:layout_height="76dp"
    android:layout_marginEnd="1dp"
    android:layout_marginRight="1dp"
    android:layout_marginBottom="2dp"
    android:text="6"
    app:layout_constraintBottom_toTopOf="@+id/num9"
    app:layout_constraintEnd_toStartOf="@+id/exponential"
    app:layout_constraintStart_toEndOf="@+id/num5"
    app:layout_constraintTop_toBottomOf="@+id/num3" />

    <Button
    android:id="@+id/num8"
    android:layout_width="84dp"
    android:layout_height="76dp"
    android:layout_marginTop="1dp"
    android:text="8"
    app:layout_constraintBottom_toTopOf="@+id/num0"
    app:layout_constraintEnd_toStartOf="@+id/num9"
    app:layout_constraintStart_toEndOf="@+id/num7"
    app:layout_constraintTop_toBottomOf="@+id/num5" />

    <Button
    android:id="@+id/num7"
    android:layout_width="84dp"
    android:layout_height="76dp"
    android:layout_marginStart="5dp"
    android:layout_marginLeft="5dp"
    android:layout_marginTop="1dp"
    android:text="7"
    app:layout_constraintBottom_toTopOf="@+id/num0"
    app:layout_constraintEnd_toStartOf="@+id/num8"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/num4" />

    <Button
    android:id="@+id/num9"
    android:layout_width="84dp"
    android:layout_height="76dp"
    android:layout_marginTop="1dp"
    android:layout_marginEnd="1dp"
    android:layout_marginRight="1dp"
    android:text="9"
    app:layout_constraintBottom_toTopOf="@+id/num0"
    app:layout_constraintEnd_toStartOf="@+id/openBrace"
    app:layout_constraintStart_toEndOf="@+id/num8"
    app:layout_constraintTop_toBottomOf="@+id/num6" />

    <Button
    android:id="@+id/num3"
    android:layout_width="84dp"
    android:layout_height="76dp"
    android:text="3"
    app:layout_constraintBottom_toTopOf="@+id/num6"
    app:layout_constraintEnd_toStartOf="@+id/plus"
    app:layout_constraintStart_toEndOf="@+id/num2"
    app:layout_constraintTop_toBottomOf="@+id/clear" />

    <Button
    android:id="@+id/num2"
    android:layout_width="84dp"
    android:layout_height="76dp"
    android:text="2"
    app:layout_constraintBottom_toTopOf="@+id/num5"
    app:layout_constraintEnd_toStartOf="@+id/num3"
    app:layout_constraintStart_toEndOf="@+id/num1"
    app:layout_constraintTop_toBottomOf="@+id/clear" />

    <Button
    android:id="@+id/equalsTo"
    android:layout_width="150dp"
    android:layout_height="76dp"
    android:layout_marginEnd="6dp"
    android:layout_marginRight="6dp"
    android:layout_marginBottom="5dp"
    android:text="="
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/num0"
    app:layout_constraintTop_toBottomOf="@+id/num9" />

    <Button
    android:id="@+id/clear"
    android:layout_width="252dp"
    android:layout_height="76dp"
    android:layout_marginStart="5dp"
    android:layout_marginLeft="5dp"
    android:layout_marginTop="8dp"
    android:text="Clear"
    app:layout_constraintEnd_toStartOf="@+id/delete"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/expression" />

    <TextView
    android:id="@+id/expression"
    android:layout_width="400dp"
    android:layout_height="331dp"
    android:layout_marginStart="5dp"
    android:layout_marginLeft="5dp"
    android:layout_marginTop="6dp"
    android:layout_marginEnd="6dp"
    android:layout_marginRight="6dp"
    android:layout_marginBottom="8dp"
    android:text=""
    app:layout_constraintBottom_toTopOf="@+id/clear"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

    <Button
    android:id="@+id/delete"
    android:layout_width="148dp"
    android:layout_height="76dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="6dp"
    android:layout_marginRight="6dp"
    android:text="Delete"
    app:layout_constraintBottom_toTopOf="@+id/plus"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/clear"
    app:layout_constraintTop_toBottomOf="@+id/expression" />

    <Button
    android:id="@+id/num1"
    android:layout_width="84dp"
    android:layout_height="76dp"
    android:layout_marginStart="5dp"
    android:layout_marginLeft="5dp"
    android:text="1"
    app:layout_constraintBottom_toTopOf="@+id/num4"
    app:layout_constraintEnd_toStartOf="@+id/num2"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/clear" />
</android.support.constraint.ConstraintLayout>

please suggest how to solve this problem.请建议如何解决这个问题。

Your implementation is working properly, but your expression TextView is being pushed upwards because you're setting a fixed height for it, and thus you can't see the text changing.您的实现工作正常,但是您的表达式TextView被向上推,因为您为其设置了固定高度,因此您看不到文本的变化。 If you want your TextView to fill in the space between the buttons and the top of your layout, you can set height to 0dp like follows:如果您希望TextView填充按钮和布局顶部之间的空间,您可以将height设置为0dp ,如下所示:

<TextView
        android:id="@+id/expression"
        android:layout_width="400dp"
        android:layout_height="0dp"
        android:layout_marginStart="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="6dp"
        android:layout_marginEnd="6dp"
        android:layout_marginRight="6dp"
        android:layout_marginBottom="8dp"
        android:text=""
        app:layout_constraintBottom_toTopOf="@+id/clear"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM