-2

我是安卓新手。我正在编写简单的代码来根据带有按钮的 EditText 更改 TextView。我的代码没有错误。但是当我从一个设备执行它时,我会被强制关闭。

这是我的代码:

public class MainActivity extends Activity {

    //EditText et = (EditText)findViewById(R.id.editText1); << Error if uncomment
    //TextView tv = (TextView)findViewById(R.id.textView1); << Error if uncomment

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


    @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;
    }
}
4

3 回答 3

2

您不能使用findViewById()就地初始化类变量

public class MainActivity extends Activity {

    EditText  et;
    TextView  tv;

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

        // move these here
        et = (EditText)findViewById(R.id.editText1);
        tv = (TextView)findViewById(R.id.textView1);
    }


    @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;
    }
}

如果您考虑一下,布局只会在调用之后初始化,setContentView因此您甚至无法在该布局中找到元素,甚至在它被初始化甚至设置为活动的布局之前。

于 2013-03-10T20:17:20.637 回答
0

请记住始终查看LogCat内容并发布您的问题

试试这个:

public class MainActivity extends Activity {

    // You can use findViewById only once the activity has finished creating, so move the initialization to onCreate function
    EditText  et;
    TextView  tv;

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

        et = (EditText)findViewById(R.id.editText1);
        tv = (TextView)findViewById(R.id.textView1);
    }


    @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;
    }
}

编辑:

你可以打开LogCatlike:点击圆圈标记的按钮(在Eclipse的右下角)

在此处输入图像描述

如果你没有它,你可以像下面这样调出它:

在此处输入图像描述

PS:我使用的是mac,但其他操作系统应该是一样的

于 2013-03-10T20:20:43.260 回答
-1

记住一件事。findViewById在你打电话后 总是打电话给,setContent否则它会给出这样的错误。

于 2013-03-10T20:35:08.173 回答