Android onClickListener只能运行一次

时间:2014-11-08 14:15:30

标签: java android eclipse

所以,我对android编程很新。我想用三个" attack"做一个简单的应用程序。按钮,当用户按下一个按钮时,它应该计算伤害,改变玩家的一个hp并输出一些文本(谁伤害了多少人)。一切正常,但只是第一次。按下第一个按钮后,应用程序不再响应按钮按下。

MainActivity.java

package sn.nujno.bitkadolgcasa;

import java.util.Random;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;



public class MainActivity extends Activity implements View.OnClickListener {
Random rand = new Random();
public int hp1 = 100;
public int hp2 = 100;
public int power = 10;
public int igralec = 1;
public String text = "";



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button nn = (Button)findViewById(R.id.nn);
    Button hn = (Button)findViewById(R.id.hn);
    Button mn = (Button)findViewById(R.id.mn);
    nn.setOnClickListener(this);
    hn.setOnClickListener(this);
    mn.setOnClickListener(this);
    }

    @Override        
    public void onClick(View v) { 
        int id = v.getId();
        int napad;
        int moznost;
        setContentView(R.layout.activity_main);
        TextView hpT=(TextView)findViewById(R.id.textView3);
        TextView hpA=(TextView)findViewById(R.id.textView4);
        TextView mw=(TextView)findViewById(R.id.mw);

        if(id == R.id.nn && igralec == 1){
        moznost = rand.nextInt(100);
            if(moznost >= 50){
                napad = rand.nextInt(10)+ 1;
                hp1 = hp1 - napad;
                text ="Tim je poskodoval Alena za " + napad + " zivljensjkih tock. Kaj bo storil Alen?" ;
            }else if(moznost < 50){
                text ="Tim je zgresil. Kaj bo storil Alen?";
        }
       igralec = 2;
       }

        else if(id == R.id.nn && igralec == 2){
        moznost = rand.nextInt(100);
            if(moznost >= 50){
                napad = rand.nextInt(10)+ 1;
                hp1 = hp1 - napad;
                text ="Alen je poskodoval Tima za " + napad + " zivljensjkih tock. Kaj bo storil Tim?" ;
            }else if(moznost < 50){
                text ="Alen je zgresil. Kaj bo storil Tim?";
            }
       igralec = 1;
       }

        else if(id == R.id.mn && igralec == 1){
            moznost = rand.nextInt(100);
            if(moznost >= 80){
                napad = rand.nextInt(15)+ 10;
                hp1 = hp1 - napad;
                text ="Tim je poskodoval Alena za " + napad + " zivljensjkih tock. Kaj bo storil Alen?" ;
            }else if(moznost < 80){
                text ="Tim je zgresil. Kaj bo storil Alen?";
            }
       igralec = 2;
       }

        else if(id == R.id.mn && igralec == 2){
            moznost = rand.nextInt(100);
            if(moznost >= 80){
                napad = rand.nextInt(15)+ 10;
                hp1 = hp1 - napad;
                text ="Alen je poskodoval Tima za " + napad + " zivljensjkih tock. Kaj bo storil Tim?" ;
            }else if(moznost < 80){
                text ="Alen je zgresil. Kaj bo storil Tim?";
            }
       igralec = 1;
       }

        else if(id == R.id.hn && igralec == 1){
            moznost = rand.nextInt(100);
            if(moznost >= 25){
                napad = rand.nextInt(5) +1;
                hp1 = hp1 - napad;
                text ="Tim je poskodoval Alena za " + napad + " zivljensjkih tock. Kaj bo storil Alen?" ;
            }else if(moznost < 25){
                text ="Tim je zgresil. Kaj bo storil Alen?";
        }
       igralec = 2;
       }

        else if(id == R.id.hn && igralec == 2){
            moznost = rand.nextInt(100);
            if(moznost >= 25){
                napad = rand.nextInt(5) +1;
                hp1 = hp1 - napad;
                text ="Alen je poskodoval Tima za " + napad + " zivljensjkih tock. Kaj bo storil Tim?" ;
            }else if(moznost < 25){
                text ="Alen je zgresil. Kaj bo storil Tim?";
        }
       igralec = 1;
       }

    else if(hp1 ==0){
        text = "Zmagal je Alen. Igra se bo začela znova.";
        hp1 = 100;
        hp2 = 100;
        igralec = 1;
        }
    else if(hp2 == 0){
        text = "Zmagal je Tim. Igra se bo začela znova.";
        hp1 = 100;
        hp2 = 100;
        igralec = 1;
        }

    mw.setText(text);
    hpT.setText(""+ hp1);
    hpA.setText(""+ hp2);
   }
}

2 个答案:

答案 0 :(得分:1)

删除

setContentView(R.layout.activity_main);

来自onClick()

您正在重新充气相同的布局,而新的布局实例并未安装onclick侦听器。

答案 1 :(得分:0)

onClick(View v)中,您致电setContentView(R.layout.activity_main);,取代Activity中已包含的所有按钮及其onClickListeners

重写你的onCreate方法(并声明字段变量):

private TextView hpT, hpA, mw;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    Button nn = (Button)findViewById(R.id.nn);
    Button hn = (Button)findViewById(R.id.hn);
    Button mn = (Button)findViewById(R.id.mn);
    nn.setOnClickListener(this);
    hn.setOnClickListener(this);
    mn.setOnClickListener(this);

    hpT = (TextView)findViewById(R.id.textView3);
    hpA = (TextView)findViewById(R.id.textView4);
    mw = (TextView)findViewById(R.id.mw);
}

并从onClick方法中删除以下行:

setContentView(R.layout.activity_main);
TextView hpT=(TextView)findViewById(R.id.textView3);
TextView hpA=(TextView)findViewById(R.id.textView4);
TextView mw=(TextView)findViewById(R.id.mw);

这是为了有效。 findViewById来电非常耗时,找不到的View在点击之间不会发生变化 - 您可以在onCreate中找到它。