#java #android #for-loop #button #switch-statement
#java #Android #для цикла #кнопка #switch-инструкция
Вопрос:
Я разрабатываю приложение для Android и пытаюсь отобразить все месяцы года в текстовом представлении. Мне нужно показывать каждый месяц по одному нажатием кнопки.
Я думал, что это может сработать именно так.
package com.flixarts.ar.englishnow;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.w3c.dom.Text;
public class saludos extends AppCompatActivity {
private TextView espacioFrases;
private Button next;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_saludos);
monthsDisplay =(TextView)findViewById(R.id.espacioFrases);
next = (Button)findViewById(R.id.next);
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//formularFrases();
}
});
}
String [] months = {"January", "February", "March", "April", "May", "June", "July", "August", "September","October", "November", "December"};
String monthToDisplay = "";
public void showMonths(){
for (int i=0 ; i<frases.length; i = i 1) {
switch (i) {
case 0 :
monthToDisplay = months[i];
monthDisplay.setText(monthToDisplay);
case 1 :
fraseamostrar = months[i];
monthDisplay.setText(monthToDisplay);
case 2 :
fraseamostrar = months[i];
monthDisplay.setText(monthToDisplay);
case 3 :
fraseamostrar = months[i];
monthDisplay.setText(monthToDisplay);
case 4 :
fraseamostrar = months[i];
monthDisplay.setText(monthToDisplay);
case 5 :
fraseamostrar = months[i];
monthDisplay.setText(monthToDisplay);
case 6 :
fraseamostrar = months[i];
monthDisplay.setText(monthToDisplay);
}
}
}
Проблема здесь в том, что мне отображается только первый месяц, январь, потому что каждый раз, когда я вызываю метод showMonths (), переменная «i» инициализируется в 0, поэтому всегда будет показывать мне первый месяц.
Я хочу сохранить значение переменной i и увеличить на единицу (i ), чтобы я мог отображать все месяцы, но каждый раз, когда я вызываю функцию i, инициализируется значение 0.
Комментарии:
1. Когда вы нажимаете на кнопку, хотите ли вы показать с января по декабрь?
2. пожалуйста, добавьте операторы break; после завершения каждого оператора case
Ответ №1:
Сохранить текущий индекс
String [] months = {"January", "February", "March", "April", "May", "June", "July", "August", "September","October", "November", "December"};
int currentMonthIdx = 0;
После этого вы сможете вызывать эту функцию при каждом нажатии кнопки:
public void onButtonClick() {
currentMonthIdx = (currentMonthIdx 1) % months.length;
monthsDisplay.setText(months[currentMonthIdx]);
}
Не забудьте отобразить первый месяц при запуске:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_saludos);
monthsDisplay =(TextView)findViewById(R.id.espacioFrases);
monthsDisplay.setText(months[0]);
}
Комментарии:
1. Иван теперь я могу видеть все месяцы январь, февраль, март… Декабрь при нажатии кнопки. Но после декабря это снова переходит к январю, вы знаете, как я могу остановить это после декабря?
2. Просто замените «currentMonthIdx = (currentMonthIdx 1) % месяцев. длина» с помощью «currentMonthIdx ;». Также вам нужно проверить границы, иначе вы поймаете исключение OutOfBoundsException…
3. если (currentMonthIdx <месяцы. длина) { monthsDisplay.setText(месяцы [currentMonthIdx]); }
Ответ №2:
public void showMonths(){
for (int i=0 ; i<frases.length; i = i 1) {
switch (i) {
case 0 :
monthToDisplay = months[i];
monthDisplay.setText(monthToDisplay);
break;
case 1 :
fraseamostrar = months[i];
monthDisplay.setText(monthToDisplay);
break;
case 2 :
fraseamostrar = months[i];
monthDisplay.setText(monthToDisplay);
break;
case 3 :
fraseamostrar = months[i];
monthDisplay.setText(monthToDisplay);
break;
case 4 :
fraseamostrar = months[i];
monthDisplay.setText(monthToDisplay);
break;
case 5 :
fraseamostrar = months[i];
monthDisplay.setText(monthToDisplay);
break;
case 6 :
fraseamostrar = months[i];
monthDisplay.setText(monthToDisplay);
break;
}
Ответ №3:
Если вам нужно показывать следующий месяц при каждом нажатии, попробуйте приведенный ниже код.
package onsource.com.onsourceinspector.data.api;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class saludos extends AppCompatActivity {
private TextView monthsDisplay;
int i = 0;
private Button next;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_saludos);
monthsDisplay = (TextView) findViewById(R.id.espacioFrases);
next = (Button) findViewById(R.id.next);
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showMonths();
}
});
}
String[] months = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
String monthToDisplay = "";
public void showMonths() {
if (i > 11)
i = 0;
monthsDisplay.setText(months[i ]);
}
}