我曾经有一些开发Android的经验,但我在6个月后再次开始并忘记了大部分内容。我现在正在使用macbook进行开发,并且不得不重新设置Eclipse,Android SDK和AVD,我担心我搞砸了。
当我使用在我的屏幕上显示“Hello World”的默认活动启动一个新项目时,应用运行正常。然后我尝试放入两个按钮,使新TextView中的文本发生变化。但每当我包含textView部分时,我都会遇到运行时错误。当我评论它时,应用程序运行但显然没有任何反应。根据我一直在阅读的教程,这是声明/创建textView的合适位置和方法,但我无法弄清楚出了什么问题。有什么建议吗?
[编辑]我在乱搞,发现我可以将mytext设为字段而不是TextView,并且有效。所以在我的onCreate()中,我把
mytext = (TextField)findViewById(R.id.TextView1);
但这似乎不是正确的做事方式。
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class IntroActivity extends Activity {
TextView myText = (TextView)findViewById(R.id.textView1);
//i've tried this with final added on to it as well (recommended by eclipse)
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setButtonClickListener();
}
private void setButtonClickListener() {
Button button1 = (Button)findViewById(R.id.button1);
Button button2 = (Button)findViewById(R.id.button2);
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
myText.setText("Hello");
}
});
button2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// myText.setText("Goodbye");
}
});
}
}
答案 0 :(得分:3)
此:
TextView myText = (TextView)findViewById(R.id.textView1);
应该分开。声明应该在同一个地方:
private TextView myText;
但是作业应该只在setContentView
之后出现:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myText = (TextView)findViewById(R.id.textView1);
这是在setContentView
之前完成的,Dalvik不知道从哪个布局获取与id R.id.textView1
匹配的视图