0

你好。我试图为 Android 创建一个计算器应用程序。尝试编写代码以显示两个按钮,以便单击其中一个按钮将其显示在文本框中。

代码是:

package com.test.cal;

android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class CalculatorActivity extends Activity implements OnClickListener {
    EditText ans;
    Button b1,b2;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {

        ans = (EditText) findViewById(R.id.ans);
        b1=(Button) findViewById(R.id.one);
        b2=(Button) findViewById(R.id.two);
        b1.setOnClickListener(this);
        b2.setOnClickListener(this);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        switch(arg0.getId())
        {
        case R.id.one:
                ans.setText(1);
            break;
        case R.id.two:
                ans.setText(2);
            break;
        default:Toast.makeText(this, "fuckoff", 1000);
            break;  
        }
     }
   }

单击空点异常转到:

b2=(Button) findViewById(R.id.two); 

线。请帮忙。我是初学者。搜索堆栈溢出,但不明白与之相关的几个答案。

4

4 回答 4

4

实际上,您的所有视图都是的,因为您之前试图定义(访问)视图setContentView(R.layout.main);

只需更改代码行,

@Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ans = (EditText) findViewById(R.id.ans);
        b1=(Button) findViewById(R.id.one);
        b2=(Button) findViewById(R.id.two);
        b1.setOnClickListener(this);
        b2.setOnClickListener(this);

    }

super.onCreate(savedInstanceState);
setContentView(R.layout.main); 

在访问main.xml文件中定义的视图之前..

于 2012-08-27T10:32:22.880 回答
2

请更改 oncreate。像这样写

@Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ans = (EditText) findViewById(R.id.ans);
        b1=(Button) findViewById(R.id.one);
        b2=(Button) findViewById(R.id.two);
        b1.setOnClickListener(this);
        b2.setOnClickListener(this);

    }
于 2012-08-27T10:35:41.930 回答
1

把下面的代码

super.onCreate(savedInstanceState);
setContentView(R.layout.main);

在访问定义的视图之前(按钮和编辑文本的初始化)。

在 setContentView(R.layout.main); 之后添加以下代码很重要 否则你会得到一个异常并且你的应用程序会崩溃。这样做的原因是,您不能在拥有视图之前使用 findViewById(),因为在此调用之前 UI 不存在。

ans = (EditText) findViewById(R.id.ans);
b1=(Button) findViewById(R.id.one);
b2=(Button) findViewById(R.id.two);
b1.setOnClickListener(this);
b2.setOnClickListener(this);
于 2012-08-27T10:33:46.713 回答
1

称呼

setContentView(R.layout.main); 

在尝试访问您的按钮和编辑文本之前

public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ans = (EditText) findViewById(R.id.ans);
        b1=(Button) findViewById(R.id.one);
        b2=(Button) findViewById(R.id.two);
        b1.setOnClickListener(this);
        b2.setOnClickListener(this);
    }
于 2012-08-27T10:34:43.600 回答