Issues running a runnable that refreshes the UI every second

I am trying to update the background of my buttons every second to keep the activity running. Everything seems to work fine with the runnable, since Logcat outputs integers every second on these two lines: Log.d("randomint", Integer.toString(randomInt));

and Log.d("back", Integer.toString(back));

, however, I don't see any visual changes on the screen as the background of all buttons remains the same.

public class CoinFrenzy extends Activity {

    private  int draw1 = R.drawable.buttonshape1;
    private  int draw2 = R.drawable.buttonshape2;
    private  int draw3 = R.drawable.buttonshape3;
    private  int draw4 = R.drawable.buttonshape4;
    private int draw5 = R.drawable.buttonshape5;
    private int draw6 = R.drawable.buttonshape6;
    private int draw7 = R.drawable.buttonshape7;
    private Handler h = new Handler(Looper.getMainLooper());
    private int draw8 = R.drawable.buttonshape8;
    private ArrayList<Integer> selector = new ArrayList<>();
    private ArrayList<Button> buttonlist = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_coin_frenzy);

        h.postDelayed(myRunnable, 1000);


    }

    public static int randInt(int min, int max) {

        // NOTE: Usually this should be a field rather than a method
        // variable so that it is not re-seeded every call.
        Random rand = new Random();

        // nextInt is normally exclusive of the top value,
        // so add 1 to make it inclusive
        int randomNum = rand.nextInt((max - min) + 1) + min;

        return randomNum;
    }


    private Runnable myRunnable = new Runnable() {
        public void run() {
            Button btn1 = (Button) findViewById(R.id.angry_btn);
            Button btn2 = (Button) findViewById(R.id.angry_btn2);
            Button btn3 = (Button) findViewById(R.id.angry_btn3);
            Button btn4 = (Button) findViewById(R.id.angry_btn4);
            Button btn5 = (Button) findViewById(R.id.angry_btn5);
            Button btn6 = (Button) findViewById(R.id.angry_btn6);
            Button btn7 = (Button) findViewById(R.id.angry_btn7);
            Button btn8 = (Button) findViewById(R.id.angry_btn8);
            buttonlist.add(btn1);
            buttonlist.add(btn2);
            buttonlist.add(btn3);
            buttonlist.add(btn4);
            buttonlist.add(btn5);
            buttonlist.add(btn6);
            buttonlist.add(btn7);
            buttonlist.add(btn8);
            selector.add(draw1);
            selector.add(draw2);
            selector.add(draw3);
            selector.add(draw4);
            selector.add(draw5);
            selector.add(draw6);
            selector.add(draw7);
            selector.add(draw8);
            for (Integer x : selector) {
                int randomInt = randInt(0, 7);
                Log.d("randomint", Integer.toString(randomInt));
                int back = selector.get(randomInt);
                Log.d("back", Integer.toString(back));
                Button currbtn = buttonlist.get(randomInt);
                currbtn.setBackgroundResource(back);

            }
            h.postDelayed(myRunnable, 1000);

            //run again in one second
        }

    };


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_coin_frenzy, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }


}

      

+3


source to share


1 answer


I think this is because of the way you use your random to get the index of the image you want and the button you want - making them display the same elements at the same time. You should just loop over your list of buttons, generate a random index for the background, and then set it on the current iteration button.



+1


source







All Articles