更改按钮文字并在Android Studio中执行相应的onClick功能

时间:2018-07-03 15:32:42

标签: java android

我试图在第一次按下按钮时动态地更改图像,并且一旦图像更改,按钮文本就应该更改,如果我们这次按下按钮,它必须打开一个新活动。但是到目前为止,以下代码似乎没有运行,并且第一次单击该按钮时崩溃。

   @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();

3 个答案:

答案 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声明的 1st switch上添加了这行代码

btn2.setText(R.string.next);

祝你好运,希望这个答案有所帮助!