2

大家好,我有问题。我对 Android 开发非常陌生,目前 Uni 课程的任务是设计一个简单的计算器。导师告诉我们,我们可以自己实现计算器,使用两个堆栈来跟踪数字和运算符,然后手动完成所有操作

或者

使用带有 JavaScript 的 WebView 对象来解决用户输入的任何内容:P 这听起来更好,所以我搜索了一下以找到试图理解的基础。我找到了这个教程:

http://www.androiddom.com/2011/04/creating-android-calculator-tutorial.html

我将首先解释我的问题,然后粘贴代码:基本上 ButtonClickListener 不起作用!我按下一个按钮,没有任何反应,WebView 对象保持空白,就像没有发生任何事情一样。当我在教程中将 JavaScript 设置为“true”的行更改为我在 Google 的官方 Android 纪录片中找到的内容并运行应用程序时,它会在我按下按钮时立即崩溃。所以按钮正在发送广播,但我的代码没有做任何事情。现在这里的代码:

package edu.calpoly.android.lab1;

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.webkit.WebView; 
import android.widget.Button;

public class MainActivity extends Activity {    
    private WebView mWebView;   
    private StringBuilder mMathString;  
    private ButtonClickListener mClickListener;

    /** Called when the activity is first created. */   
    @Override   
    public void onCreate(Bundle savedInstanceState){
         super.onCreate(savedInstanceState);        
         setContentView(R.layout.activity_main);

         // Create the math string      
         mMathString = new StringBuilder();

         // Enable javascript for the view      
         mWebView = (WebView) findViewById(R.id.webview);
         mWebView.getSettings().setJavaScriptEnabled(true);

         // Set the listener for all the buttons        
         mClickListener = new ButtonClickListener();        
         int idList[] = { R.id.button0, R.id.button1, R.id.button2,
                R.id.button3, R.id.button4, R.id.button5, R.id.button6,
                R.id.button7, R.id.button8, R.id.button9, R.id.buttonLeftParen,
                R.id.buttonRightParen, R.id.buttonPlus, R.id.buttonPlus,
                R.id.buttonMinus, R.id.buttonDivide, R.id.buttonTimes,
                R.id.buttonDecimal, R.id.buttonBackspace, R.id.buttonClear };

        for (int id : idList){ 
            View v = findViewById(id); 
            v.setOnClickListener(mClickListener);       
        }

    }

    private void updateWebView() {
        StringBuilder builder = new StringBuilder();
        builder.append("<html><body>");
        builder.append("<script type=\"text/javascript\">document.write('");
        builder.append(mMathString.toString());
        builder.append("');"); 
        builder.append("document.write('<br />=' + eval(\"");
        builder.append(mMathString.toString()); 
        builder.append("\"));</script>"); 
        builder.append("</body></html>");

        mWebView.loadData(builder.toString(), "application/xhtml", "UTF-8");    
    }

    private class ButtonClickListener implements OnClickListener {
        @Override 
        public void onClick(View v) {           
            switch (v.getId()) { 
                case R.id.buttonBackspace:
                    if (mMathString.length() > 0)
                        mMathString.deleteCharAt(mMathString.length() - 1);
                    break;          
                case R.id.buttonClear:
                    if (mMathString.length() > 0)
                        mMathString.delete(0, mMathString.length());
                    break;          
                default:
                    mMathString.append(((Button) v).getText());             
            }

            updateWebView();        
        }    
    } 
}

和 XML 布局:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <WebView
        android:id="@+id/webview"
        android:layout_width="fill_parent"
        android:layout_height="50dip" />

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/buttonLeftParen"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="(" >
        </Button>

        <Button
            android:id="@+id/buttonRightParen"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text=")" >
        </Button>

        <Button
            android:id="@+id/buttonBackspace"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="B" >
        </Button>

        <Button
            android:id="@+id/buttonClear"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="C" >
        </Button>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayout2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/button7"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="7" >
        </Button>

        <Button
            android:id="@+id/button8"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="8" >
        </Button>

        <Button
            android:id="@+id/button9"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="9" >
        </Button>

        <Button
            android:id="@+id/buttonPlus"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="+" >
        </Button>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayout3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/button4"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="4" >
        </Button>

        <Button
            android:id="@+id/button5"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="5" >
        </Button>

        <Button
            android:id="@+id/button6"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="6" >
        </Button>

        <Button
            android:id="@+id/buttonMinus"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="-" >
        </Button>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayout4"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/button1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="1" >
        </Button>

        <Button
            android:id="@+id/button2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="2" >
        </Button>

        <Button
            android:id="@+id/button3"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="3" >
        </Button>

        <Button
            android:id="@+id/buttonTimes"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="*" >
        </Button>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayout5"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/button0"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="0" >
        </Button>

        <Button
            android:id="@+id/buttonDecimal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="." >
        </Button>

        <Button
            android:id="@+id/buttonEquals"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="=" >
        </Button>

        <Button
            android:id="@+id/buttonDivide"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="/" >
        </Button>
    </LinearLayout>

</LinearLayout>

^ 版式很无聊,只是为了它而发布它。提前谢谢你!

4

0 回答 0