When I click, I want to define the phrase through the indexes

1

As you can see in the code, when I click I'm defining the phrase in a random way, but when I click, I want the phrase to be defined by the indexes myself, how do I do this?

Public class MainActivity extends AppCompatActivity {

    private TextView textoNovaFrase;
    private Button botaoNovaFrase;

    private String[] frases = {
            "Se você traçar metas absurdamente altas e falhar, seu fracasso será muito melhor que o sucesso de todos",
            "O sucesso normalmente vem para quem está ocupado demais para procurar por ele",
            "Se você não está disposto a arriscar, esteja disposto a uma vida comum"
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textoNovaFrase = (TextView) findViewById(R.id.textoNovaFraseId);
        botaoNovaFrase = (Button) findViewById(R.id.botaoNovaFraseId);

        botaoNovaFrase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Random randomico = new Random();
                int numeroAleatorio = randomico.nextInt( frases.length );

                textoNovaFrase.setText( frases[ numeroAleatorio ] );
            }
        });
    
asked by anonymous 13.10.2017 / 05:31

1 answer

1

If you want to put different phrases in a sequential way you can use a field in the class to find out what position it is going to go on and increment as it shows:

Public class MainActivity extends AppCompatActivity {
    ....
    private String[] frases = {
            "Se você traçar metas absurdamente altas e falhar, seu fracasso será muito melhor que o sucesso de todos",
            "O sucesso normalmente vem para quem está ocupado demais para procurar por ele",
            "Se você não está disposto a arriscar, esteja disposto a uma vida comum"
    };
    private int posicao = 0; //novo campo aqui

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        botaoNovaFrase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                textoNovaFrase.setText( frases[ posicao++] ); //mostra e incrementa aqui

            }
        });

Note that this causes a problem if you click too many times because it passes the dimension of the array frases . You can improve and fix this by:

textoNovaFrase.setText( frases[posicao%frases.length] );
posicao++;

So it always generates an index between 0 and the size of the array, which will always work correctly.

Even though with to stay with the 100% correct solution you will have to save and restore this new field in the Activity state, particularly in onSaveInstanceState and onRestoreInstanceState , otherwise running the orientation of the device or other type of configuration changes make you lose the position you were in.

Read more about the status of an Activity here

    
13.10.2017 / 12:52