2014-11-08 5 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

это как-то связано с ** igralec **, вы проходите в условии if ... onClick() получает вызов каждый раз. – nobalG

ответ

1

Удалить

setContentView(R.layout.activity_main); 

от вашего onClick().

Вы повторно раздуваете ту же компоновку, и в новом экземпляре макета нет установленных слушателей 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.

Смежные вопросы