我正在为一个项目制作一个简单的GPA计算器,我们首先使用xml进行计算,现在我的教授希望它是动态的。我有4个文本视图,4个编辑文本和1个按钮。一切都运行良好,但当我尝试设置OnClickListener()时,程序会崩溃。如何使按钮以编程方式工作。以下是我正在尝试的。
android.widget.LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
// button
Button button1 = new Button(this);
final int button1id = View.generateViewId();
button1.setId(button1id); // id
button1.setText("Send Data");
button1.setLayoutParams(params);
layout.addView(button1);
button1 = (Button) findViewById(button1id);
OnClickListener clicks = new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.getId() == button1id){
Intent i = new Intent(getApplicationContext(), SecondActivity.class);
startActivity(i);
}
}
};
然后当我调用这个时,它会给我一个错误。
button1.setOnClickListener(clicks);
提前谢谢。
不要执行findViewById
。简单调用:
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(getApplicationContext(), SecondActivity.class);
startActivity(i);
}
});
这将解决你的问题。
不再需要按id调用按钮,也无需更改视图。将ClickListener改为OnClickListener
android.widget.LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
// button
Button button1 = new Button(this);
final int button1id = View.generateViewId();
button1.setId(button1id); // id
button1.setText("Send Data");
button1.setLayoutParams(params);
layout.addView(button1);
button1.setOnClickListener(clicks)
OnClickListener clicks = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.getId() == button1id){
Intent i = new Intent(getApplicationContext(), SecondActivity.class);
startActivity(i);
}
}
};