我一直在尝试构建一个数学闪存卡应用程序,用户输入两个数字,然后选择一个按钮,具体取决于它是否需要数字加,减或乘。
图像:http://i.stack.imgur.com/83FdN.png
问题似乎是OnClickListener。我用一个按钮创建了其他项目,它们工作得很好,但有两个按钮,我不知道该怎么做。
我试过了:
我已经取出按钮代码并运行它然后它可以工作。我不知道还能做什么。
这是我尝试使用一个按钮尝试的最后一个代码,app仍然强行关闭。
public class MainActivity extends ActionBarActivity implements OnClickListener{
int num1, num2, total;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText txtInt1 = (EditText)findViewById(R.id.txtInt1);
final EditText txtInt2 = (EditText)findViewById(R.id.txtInt2);
final TextView result = (TextView) findViewById(R.id.txtResult);
num1 = Integer.parseInt(txtInt1.getText().toString());
num2 = Integer.parseInt(txtInt2.getText().toString());
final Button btnAddition = (Button) findViewById(R.id.btnAddition);
Button btnSubstraction = (Button) findViewById(R.id.btnSubstraction);
Button btnMultiplication = (Button) findViewById(R.id.btnMultiplication);
/*
btnSubstraction.setOnClickListener(this);
btnAddition.setOnClickListener(this);
btnMultiplication.setOnClickListener(this); */
btnAddition.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (v == btnAddition){
if (num1 <=0 || num1 >20 || num2 <=0 || num2 >20 ){
Toast.makeText(MainActivity.this, "The numbers shoudl be between 1 and 20",
Toast.LENGTH_SHORT).show();
}
else {
total = num1+num2;
result.setText(num1+" + "+num2+" = "+total);
}
}
}
});
谢谢!
答案 0 :(得分:1)
最好将它们移动到单个OnClick代码块。 检查v.getId()是否为按钮ID。 尝试将代码更改为
btnSubstraction.setOnClickListener(this);
btnAddition.setOnClickListener(this);
btnMultiplication.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.btnAddition){
if (num1 <=0 || num1 >20 || num2 <=0 || num2 >20 ){
Toast.makeText(MainActivity.this, "The numbers shoudl be between 1 and 20",
Toast.LENGTH_SHORT).show();
}
else {
total = num1+num2;
result.setText(num1+" + "+num2+" = "+total);
}
}
}
});
答案 1 :(得分:1)
由于您正在实现OnClickListener,因此需要在onClick上使用覆盖方法(View arg)。通过使用开关,您可以为希望单击操作的每个按钮设置单独的案例。以下是步骤
1)实例化按钮小部件后:将onClickListener设置为每个按钮小部件
btnSubstraction.setOnClickListener(this);
btnAddition.setOnClickListener(this);
btnMultiplication.setOnClickListener(this);
2)在onClick()方法中创建案例:确保它不在你的onCreate()
中@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnAddition:
// do some action for addition
break;
case R.id.btnSubstraction:
// do some action for substraction
break;
case R.id.btnMultiplication:
// do some action for multiplication
break;
default:
break;
}
}
3)确保实现OnClickListener
有关按钮的精彩教程,请查看http://ljtatum.blog.com/buttons/。您可以下载免费的示例代码。但我上面发布的内容对你有用。干杯!
答案 2 :(得分:0)
您是否尝试过设置日志?你可以这样做: Log.e(&#34; TAG&#34;&#34; MSG&#34);
然后您可以观看LogCat并查找错误! ;)
我会实现其他按钮,就像你使用匿名内部类的第一个按钮一样。
btnSubstraction.setOnClickListener(new OnCLickListener() {
@Override
public void onClick(View v){
Your Code goes here or u trigger another Method for readability for example:
Substraction();
...
你应该密切注意按钮的ID: R.findViewById ...
但如果你触发按钮对象上的onClick,你甚至不需要这个。 ;) 是的,我想是的,尝试离开:
if(v==btnAddition)
系统已经通过触发按钮对象onClick来了解这一点。
所以你的代码应该是这样的:
btnAddition.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (num1 <=0 || num1 >20 || num2 <=0 || num2 >20 ){
Toast.makeText(MainActivity.this, "The numbers shoudl be between 1 and 20",
Toast.LENGTH_SHORT).show();
}
else {
total = num1+num2;
result.setText(num1+" + "+num2+" = "+total);
}
}
}
});
btnSubstraction.setOnClickListener(new OnCLickListener() {
@Override
public void onClick(View v){
//Substractioncode here
}
});
答案 3 :(得分:0)
DaveS。说的是你可能在这两行onCreate()
中得到例外
num1 = Integer.parseInt(txtInt1.getText().toString());
num2 = Integer.parseInt(txtInt2.getText().toString());
这些应移至onClick()
,因为在onCreate()
中他们尚未获得值,因此您将获得NumberFormatException
。您还应该进行一些错误检查,例如
try {
num1 = Integer.parseInt(txtInt1.getText().toString());
num2 = Integer.parseInt(txtInt2.getText().toString());
} catch (NumberFormatException e) {
// log the error and possibly print a message to the user
}
当您的应用崩溃时,您应该始终发布您的堆栈跟踪,以便我们可以轻松找到答案。您发布的代码的问题不在于您设置OnClickListener
的方式,而是您所指示的。
This SO answer显示如何为OnClickListener
设置Buttons
。一切都会正常工作,所以你决定哪种方式最适合你。
答案 4 :(得分:0)
您正在尝试getText
并在string
的{{1}}中转换int
。在onCreate()
中,当您尝试转换它时,您将获得onCreate()
空白字符串,您将获得""
。解决方案是在按钮的NumberFormatException
方法中移动这两个。
onClick