2015-10-25 1 views
0

Я пытаюсь выяснить синтаксис о том, как заставить for-loop ждать кнопки buttonclick прежде чем цикл перейдет к следующему раунду. Приложение может показаться бессмысленным, но нужно выяснить этот синтаксис.Android: Как нажимать кнопку внутри «for-loop», чтобы приложение начинало следующий раунд цикла

В коде под кнопкой А предполагается изменить номер для каждого раунда. Текст в buttonA должен быть текущим номером в счетчике (x) цикла for. Я хочу, чтобы он сначала отображал «1», и когда одна из кнопок нажата, я хочу, чтобы она отображала «2» (потому что следующий раунд в for-loop x должен быть «2»), а в следующий раз «3 ». Используя код под кнопкойA отображает «3» в качестве запуска приложения, поэтому очевидно, что цикл for завершился до того, как приложение запустится.

Вот код в OnCreate-метода:

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import java.util.Random; 

public class MainActivity extends AppCompatActivity { 
private TextView textView1; 
private Button buttonA; 
private Button buttonB; 
private Button buttonC; 
private TextView textView2; 
private int a; 
private int b; 
private int c; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    textView1 = (TextView) findViewById(R.id.txtView1); 
    buttonA = (Button) findViewById(R.id.btn1); 
    buttonB = (Button) findViewById(R.id.btn2); 
    buttonC = (Button) findViewById(R.id.btn3); 
    textView2 = (TextView) findViewById(R.id.txtView2); 
    final Random rndNumber = new Random(); 

    for (int x = 1; x <= 3; x++){ 
     buttonA.setText(Integer.toString(x)); 
     buttonB.setText("5"); 
     buttonC.setText("9"); 

     buttonA.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       textView2.setText("Good, you pushed the right button"); 
      } 
     });//End onClickListenerA 
     buttonB.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       textView2.setText("Wrong button"); 
      } 
     });//End onClickListenerB 
     buttonC.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       textView2.setText("Wrong button "); 
      } 
     });//End onClickListenerA 
    }//End for-loop 
}//End onCreate 

ответ

1

Um. Не.

Вам нужна петля, как будто вы, конечно же, не можете так ее прорезать. Вам нужно установить переменные в активности, дождаться взаимодействия с пользователем, а затем увеличить установленную вами переменную и вызвать функцию для настройки следующего раунда.

int x; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    textView1 = (TextView) findViewById(R.id.txtView1); 
    buttonA = (Button) findViewById(R.id.btn1); 
    buttonB = (Button) findViewById(R.id.btn2); 
    buttonC = (Button) findViewById(R.id.btn3); 
    textView2 = (TextView) findViewById(R.id.txtView2); 
    final Random rndNumber = new Random(); 
    x = 1; 
    setupRound(); 
} 
private void setupRound() { 
     buttonA.setText(Integer.toString(x)); 
     buttonB.setText("5"); 
     buttonC.setText("9"); 

     buttonA.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       textView2.setText("Good, you pushed the right button"); 
       setupRound(); 
      } 
     });//End onClickListenerA 
     buttonB.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       textView2.setText("Wrong button"); 
       setupRound(); 
      } 
     });//End onClickListenerB 
     buttonC.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       textView2.setText("Wrong button "); 
       setupRound(); 
      } 
     });//End onClickListenerA 
i++; 
} 
+0

Спасибо, это работает! Но что, если я хочу, чтобы программа остановилась после x <= 5? Как я могу остановить его, не используя цикл for-loop или while? – user820913

+1

Сделать условие выхода. «если (x> 5) вернуться;» в раунде настройки. Или, скорее, установите остальную часть невидимой вещи или что угодно, когда вы выйдете. – Tatarize

+0

Это сработало, когда я положил оператор (if (x> 5) {return;}) внутри метода buttonA-onClick. Спасибо :-) – user820913

1

Я не думаю, что вам нужно для цикла в вашем случае.

Попробуйте просто использовать счетчик:

private int mCounterX; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    textView1 = (TextView) findViewById(R.id.txtView1); 
    buttonA = (Button) findViewById(R.id.btn1); 
    buttonB = (Button) findViewById(R.id.btn2); 
    buttonC = (Button) findViewById(R.id.btn3); 
    textView2 = (TextView) findViewById(R.id.txtView2); 
    final Random rndNumber = new Random(); 
    mCounterX= 1; 
    buttonA.setText(Integer.toString(mCounterX)); 
    buttonB.setText("5"); 
    buttonC.setText("9"); 

    buttonA.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      textView2.setText("Good, you pushed the right button"); 
      mCounterX++; 
      buttonA.setText(Integer.toString(mCounterX)); 
     } 
    });//End onClickListenerA 

    buttonB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      textView2.setText("Wrong button"); 
      mCounterX++; 
      buttonA.setText(Integer.toString(mCounterX)); 
     } 
    });//End onClickListenerB 

    buttonC.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      textView2.setText("Wrong button "); 
      mCounterX++; 
      buttonA.setText(Integer.toString(mCounterX)); 
     } 
    });//End onClickListenerA 

}//End onCreate