写了一个Android小程序,在Eclipse编译通过了。但是不能在虚拟机上运行。
public class SimpleTextActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findView();
setListener();
}
double sum = 0;
private EditText ed1;
private EditText ed2;
private TextView tv1;
private Button b1;
public void findView() {
ed1 = (EditText) findViewById(R.id.edit1);
ed2 = (EditText) findViewById(R.id.edit2);
tv1 = (TextView) findViewById(R.id.text3);
b1 = (Button) findViewById(R.id.button);
}
public void setListener() {
b1.setOnClickListener((android.view.View.OnClickListener) calcB);
}
OnClickListener calcB = new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
double e1 = Double.parseDouble(ed1.getText().toString());
double e2 = Double.parseDouble(ed2.getText().toString());
sum = e1 * e2;
if (sum > 26) {
tv1.setText("@string/jianyi1");
} else if (sum < 20) {
tv1.setText("@string/jianyi3");
} else {
tv1.setText("@string/jianyi2");
}
}
};
} 展开
setText()里面还可以这样写,我还是头次看到不过没有错误,这样做很好值得表扬。另外你的模块化写的不错。
其实你错的地方对于初学者来说很难找到,但是也很容易找到,因为特征很明显。
看看这张截图,能不能发现和你的代码什么不同?
对public void onClick(DialogInterface dialog, int which)和public void onClick(View v)这方法头不一样。android里面有两个OnClickListener,一个是View包下的,另一个是DialogInterface 包下的。而我们初学android在实现监听器的时候,我们要实现View包下面的OnClickListener,而不是DialogInterface 下的。所以在使用自动完成提示的时候你仔细要看清楚是哪个包下的。
你的这个程序的修改方法就是,把import块里的OnClickListener引用删除,此时Eclipse里面会提示你OnClickListener有错误,鼠标指向OnClickListener calcB = new OnClickListener() ,import一下View包下的OnClickListener,然会会提示你还有未实现的抽象方法,这时,你就要把public void onClick(DialogInterface dialog, int which)替换为public void onClick(View v),这才可以。