我的android应用程序中的TextView不显示预期的或任何文本.虽然每件事看起来都是正确的



以下是我使用android时main.xml中的一些代码:OnClick

<Button
    android:id="@+id/button6"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="0dp" 
    android:layout_weight="0.166"    
    android:text="6"
    android:onClick="ProcessInput"
    android:layout_height="match_parent"
    android:gravity="fill" />

这是带有进程输入法的main.java的代码

public void ProcessInput(View v)
{
    Button btn = (Button) v;
    String text = btn.getText().toString();
    String currentInput = inputText.getText().toString();
    int currentInputLen = currentInput.length();
    String evalResult = null;
    double userInputValue = Double.NaN;
    if(btn.getText()=="del")
    {
        if(resetInput)
            return;
        int endIndex = currentInputLen - 1;
        if(endIndex<1)
        {
            inputText.setText("0");
        }
        else
        {
            inputText.setText(currentInput.subSequence(0, endIndex));
        }
    }
    else if(btn.getText()=="±")
    {
        if (currentInputLen > 0 && currentInput != "0") 
        {
            // Already has (-) sign. Remove that sign
            if (currentInput.charAt(0) == '-') 
            {
                inputText.setText(currentInput.subSequence(1,
                        currentInputLen));
            }
            // Prepend (-) sign
            else 
            {
                inputText.setText("-" + currentInput.toString());
            }
        }
    }
    else if(btn.getText()==".")
    {
        if (hasFinalResult || resetInput) {
            inputText.setText("0" + mDecimalSeparator);
            hasFinalResult = false;
            resetInput = false;
        } else if (currentInput.contains("."))
            return;
        else
            inputText.append(mDecimalSeparator);
    }
    else if(btn.getText()=="+"||btn.getText()=="-"||btn.getText()=="/"||btn.getText()=="x")
    {
        if (resetInput) {
            mInputStack.pop();
            mOperationStack.pop();
        } else {
            if (currentInput.charAt(0) == '-') {
                mInputStack.add("(" + currentInput + ")");
            } else {
                mInputStack.add(currentInput);
            }
            mOperationStack.add(currentInput);
        }
        mInputStack.add(text);
        mOperationStack.add(text);
        dumpInputStack();
        evalResult = evaluateResult(false);
        if (evalResult != null)
            inputText.setText(evalResult);
        resetInput = true;
    }
    else if(btn.getText()=="1"||btn.getText()=="2"||btn.getText()=="3"||btn.getText()=="4"||btn.getText()=="5"||btn.getText()=="6"||btn.getText()=="7"||btn.getText()=="8"||btn.getText()=="9"||btn.getText()=="0")
    {
                inputText.append(text);
                resetInput = false;
    }
}

如果需要,这里有完整的main.java代码

package com.example.calculator;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Iterator;
import java.util.Stack;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

公共类MainActivity扩展ActionBarActivity{

private TextView inputText,resultText;
double firstNumber=0,secondNumber=0,result=0;
int firstOperand=0,TotalOperator=0;
Stack<String> mInputStack;
Stack<String> mOperationStack;
TextView mStackText;
boolean resetInput = false;
boolean hasFinalResult = false;
String mDecimalSeparator;
double memoryValue = Double.NaN;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    DecimalFormat currencyFormatter = (DecimalFormat) NumberFormat.getInstance();
    char decimalSeparator = currencyFormatter.getDecimalFormatSymbols().getDecimalSeparator();
    mDecimalSeparator = Character.toString(decimalSeparator);
    setContentView(R.layout.main);
    mInputStack = new Stack<String>();
    mOperationStack = new Stack<String>();
    inputText = (TextView) findViewById(R.id.InputText);
    inputText.setText("0");
    resultText = (TextView) findViewById(R.id.ResultText);
    resultText.setText("");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
public void ProcessInput(View v)
{
    Button btn = (Button) v;
    String text = btn.getText().toString();
    String currentInput = inputText.getText().toString();
    int currentInputLen = currentInput.length();
    String evalResult = null;
    double userInputValue = Double.NaN;
    if(btn.getText()=="del")
    {
        if(resetInput)
            return;
        int endIndex = currentInputLen - 1;
        if(endIndex<1)
        {
            inputText.setText("0");
        }
        else
        {
            inputText.setText(currentInput.subSequence(0, endIndex));
        }
    }
    else if(btn.getText()=="±")
    {
        if (currentInputLen > 0 && currentInput != "0") 
        {
            // Already has (-) sign. Remove that sign
            if (currentInput.charAt(0) == '-') 
            {
                inputText.setText(currentInput.subSequence(1,
                        currentInputLen));
            }
            // Prepend (-) sign
            else 
            {
                inputText.setText("-" + currentInput.toString());
            }
        }
    }
    else if(btn.getText()==".")
    {
        if (hasFinalResult || resetInput) {
            inputText.setText("0" + mDecimalSeparator);
            hasFinalResult = false;
            resetInput = false;
        } else if (currentInput.contains("."))
            return;
        else
            inputText.append(mDecimalSeparator);
    }
    else if(btn.getText()=="+"||btn.getText()=="-"||btn.getText()=="/"||btn.getText()=="x")
    {
        if (resetInput) {
            mInputStack.pop();
            mOperationStack.pop();
        } else {
            if (currentInput.charAt(0) == '-') {
                mInputStack.add("(" + currentInput + ")");
            } else {
                mInputStack.add(currentInput);
            }
            mOperationStack.add(currentInput);
        }
        mInputStack.add(text);
        mOperationStack.add(text);
        dumpInputStack();
        evalResult = evaluateResult(false);
        if (evalResult != null)
            inputText.setText(evalResult);
        resetInput = true;
    }
    else if(btn.getText()=="1"||btn.getText()=="2"||btn.getText()=="3"||btn.getText()=="4"||btn.getText()=="5"||btn.getText()=="6"||btn.getText()=="7"||btn.getText()=="8"||btn.getText()=="9"||btn.getText()=="0")
    {
                inputText.append(text);
                resetInput = false;
    }
}
private void dumpInputStack() {
    Iterator<String> it = mInputStack.iterator();
    StringBuilder sb = new StringBuilder();
    while (it.hasNext()) {
        CharSequence iValue = it.next();
        sb.append(iValue);
    }
    mStackText.setText(sb.toString());
}
private String evaluateResult(boolean requestedByUser) {
    if ((!requestedByUser && mOperationStack.size() != 4)
            || (requestedByUser && mOperationStack.size() != 3))
        return null;
    String left = mOperationStack.get(0);
    String operator = mOperationStack.get(1);
    String right = mOperationStack.get(2);
    String tmp = null;
    if (!requestedByUser)
        tmp = mOperationStack.get(3);
    double leftVal = Double.parseDouble(left.toString());
    double rightVal = Double.parseDouble(right.toString());
    double result = Double.NaN;
    if (operator.equals("/")) {
        result = leftVal / rightVal;
    } else if (operator.equals("x")) {
        result = leftVal * rightVal;
    } else if (operator.equals("+")) {
        result = leftVal + rightVal;
    } else if (operator.equals("-")) {
        result = leftVal - rightVal;
    }
    String resultStr = doubleToString(result);
    if (resultStr == null)
        return null;
    mOperationStack.clear();
    if (!requestedByUser) {
        mOperationStack.add(resultStr);
        mOperationStack.add(tmp);
    }
    return resultStr;
}
private String doubleToString(double value) {
    if (Double.isNaN(value))
        return null;
    long longVal = (long) value;
    if (longVal == value)
        return Long.toString(longVal);
    else
        return Double.toString(value);
}

}

我不知道出了什么问题,我试图将btn.getText((=="1"更改为btn.getText((=='1',但那也是错误的。我该怎么办?

在Java中比较Strings时,使用String.equals()方法代替比较Object引用的==方法。

相关内容

最新更新