Как я могу отобразить элементы массива в TextView, нажав кнопку

#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  ]);
 }    
}