Question

I am tgrying to run a handler that changes the text on a button ever second but it is not running at all, i get no error message or nothing.

here is the code

Button letterButton;
Handler handler;

String[] alphabet = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
        "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W",
        "X", "Y", "Z" };

protected void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    setContentView(R.layout.changeletters);
    getSupportActionBar().hide();

    letterButton = (Button) findViewById(R.id.letterButton);
    letterButton.setOnClickListener(this);

    handler = new Handler();
    handler.postDelayed(run, 1000);
}


Runnable run = new Runnable() {

    @Override
    public void run() {
        int index = 0;
        letterButton.setText(alphabet[index++]);
    }
};
Was it helpful?

Solution

You define index every time to 0 then increment it, but after call. That's why your button always shows "A".

move int index = 0; onto onCreate before handler = new Handler();

new Timer().schedule(new TimerTask(){
    @Override
    public void run() {
        runOnUiThread(new Runnable(){
            @Override
            public void run() {
                letterButton.setText(alphabet[index++]);
            };
        });
    }
}, 0, 1000);

Looks bit overcomplicated, but after some training it becomes easy.

OTHER TIPS

@Override
public void onCreate(Bundle bundle){

    // Your previous code...

    createRunnableWithIndex(0);

}

public void createRunnableWithIndex(final int index){

    handler.postDelayed(new Runnable() {

        @Override
        public void run() {
            letterButton.setText(alphabet[index]);
            createRunnableWithIndex((index+1) % 26);
        }

    }, 1000);

}

I have some easy way to it whatever i have got from ur req it might repeat after Z so I have added some tweak in our old code

enter code here
Button letterButton;
 Handler handler;
int index = -1;
String[] alphabet = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
    "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W",
    "X", "Y", "Z" };
 protected void onCreate(Bundle bundle) {
 super.onCreate(bundle);
 setContentView(R.layout.changeletters);
 getSupportActionBar().hide();
 letterButton = (Button) findViewById(R.id.letterButton);
 letterButton.setOnClickListener(this);
 handler = new Handler();
 handler.postDelayed(run, 1000);
 }
 Runnable run = new Runnable() {
@Override
public void run() {
    if(index<alphabet.size()){
  index+=1;
   }else{
  index=0;
     }
    letterButton.setText(alphabet[index]);
 }
 };
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top