我试图在第一次按下按钮时动态地更改图像,并且一旦图像更改,按钮文本就应该更改,如果我们这次按下按钮,它必须打开一个新活动。但是到目前为止,以下代码似乎没有运行,并且第一次单击该按钮时崩溃。
@Override
public void onClick(View v) {
final int status = (Integer) v.getTag();
if (status == 1) {
change(v);
btn2.setText(R.string.next);
v.setTag(0);
next(v);
} else
{
btn2.setText(R.string.command);
v.setTag(1);
}
}
public void change(View v) {
btn2.setTag(1);
btn2.setText(R.string.command);
ImageView doggy = findViewById(R.id.imageView);
doggy.setImageResource(R.drawable.dog_sit);
}
public void next(View v){
v.setTag(0);
Intent i = new Intent(this, NumberShapes.class);
startActivity(i);
}
logcat指出的错误如下:-
07-03 21:44:19.944 31179-31179/com.example.angelinekingsteena.myapplication
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.angelinekingsteena.myapplication, PID: 31179
java.lang.NullPointerException: Attempt to invoke virtual method 'int
java.lang.Integer.intValue()' on a null object reference
at
com.example.angelinekingsteena.myapplication.Doggie.onClick(Doggie.java:37)
at android.view.View.performClick(View.java:5207)
根据logcat,错误位于以下行
final int status = (Integer) v.getTag();
答案 0 :(得分:0)
也许可以使用onClick方法上的Switch-Case语句来执行此操作,并使用一个标志来启动,因此,如果您第一次按下该按钮,则更改图像,文本并更改标志值,如果您按使用新的标志值再次将其转到另一种情况,您可以从那里打开活动。
答案 1 :(得分:0)
更改
final int status = (Integer) v.getTag();
到:
final String status = v.getTag().toString;
并使用标签并将其作为字符串进行比较。
我也希望您在xml中将初始标签设置为1。
答案 2 :(得分:0)
尝试执行此操作,获取并设置Button
的标签对我来说似乎不是必需的,II认为只是在 Global范围内创建变量 >可以完成相同的工作,但是麻烦更少。
private static int status = 0;
@Override
public void onClick(View v) {
switch (status) {
case 0:
change(v);
btn2.setText(R.string.next);
status = 1;
break;
case 1:
next(v)
break;
} }
请紧记::下一次问问题时,请尝试多解释一些事情。您的代码与您最初尝试做的完全不符,完全是 。
编辑:我在
case
声明的 1stswitch
上添加了这行代码btn2.setText(R.string.next);
祝你好运,希望这个答案有所帮助!