setBackgroundResource doesn't set the image

前端 未结 6 1575
青春惊慌失措
青春惊慌失措 2020-12-22 07:44
    Handler hnd = new Handler() {

    @Override
    public void handleMessage(Message msg) {

        int id = sequence.get(msg.arg1);

        if(msg.arg1 % 2 == 0         


        
6条回答
  •  臣服心动
    2020-12-22 08:13

    Because the resource changes in the UI thread and you are sleeping your background thread. The UI thread is running normally. Use handlers:

    public class MainActivity extends Activity {
    
    Button b;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b = (Button) findViewById(R.id.button1);
    }
    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
    
            if (msg.arg1 % 2 == 0) {
                b.setBackgroundResource(R.drawable.analytic_icon);
            } else {
                b.setBackgroundResource(R.drawable.ic_launcher);
            }
        }
    };
    
    @Override
    public void onResume() {
        super.onResume();
    
        Thread background = new Thread(new Runnable() {
            public void run() {
                try {
                    for (int i = 0; i < 20; i++) { 
                        Thread.sleep(2000);
                        Message msg = handler.obtainMessage(); 
                        msg.arg1 = i;
                        msg.sendToTarget();
                    }
                } catch (Throwable t) {
                    // just end the background thread
                }
            }
        });
    
        background.start();
    }
    }
    

提交回复
热议问题