所以,我对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);
}
}
答案 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
中找到它。