2014-11-08 75 views
2

所以,我对android编程很陌生。我想用三个“攻击”按钮做一个简单的应用程序,当用户按下一个按钮时,它应该计算伤害,改变玩家的一个hp值并输出一些文字(谁伤害了多少人)。一切正常,但只是第一次。在第一个按钮按下后,应用程序不再响应按钮按下。Android onClickListener只能工作一次

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); 
    } 
} 
+0

它与您在if条件中传递的** igralec **有关...... onClick()每次都会被调用。 – nobalG 2014-11-08 14:17:57

回答

1

onClick()取出

setContentView(R.layout.activity_main); 

您正在重新填充相同的布局,并且新布局实例没有安装onclick侦听器。

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中找到一次。