onClick и setImagResource [Android] API 10 - PullRequest
0 голосов
/ 15 марта 2012

Я пытаюсь понять, почему у меня возникает следующая проблема. У меня есть ImageView, и я устанавливаю для него изображение, затем я устанавливаю для него onClickListener, поэтому, когда вы нажимаете на изображение, оно меняет изображение (на новое изображение) с помощью image01.setImageResource (R.drawable.newImage). После этого я вызываю метод, в котором проверяю условие, и если оно истинно, я снова меняю изображение на изображение по умолчанию. Но я не вижу изменений, потому что они меняются немедленно. Я также вставляю сон, чтобы сделать его медленнее. (По умолчанию в коде xml я установил изображение на oldImage)

Хорошо ... может быть, это не ясно .. так что давайте посмотрим КОД:

private void myMethod(){
        ImageView image01 = (ImageView) findViewById(R.id.image01);
        image01.setOnClickListener(new OnClickListener() {
              @Override
              public void onClick(View v) {
              //When you click on image it change!
              image01.setImageResource(R.drawable.newImage);
              checkImg(image01);
              }
        });
}


private void checkGame(ImageView img){
        try{
           Thread.sleep(1000);  

           if(condition)
               img.setImageResource(R.drawable.oldImage);

        }catch (Exception e) {
          e.printStackTrace();
        }
}

Я сразу увидел старое изображение. В чем проблема? Возможно ли, что изменение представления не применяется в myMethod () до тех пор, пока все методы внутри него не прекратятся?

Заранее спасибо

1 Ответ

1 голос
/ 15 марта 2012

Используя метод Thread.sleep (), вы фактически ожидаете основной поток пользовательского интерфейса.Методы основного потока пользовательского интерфейса не синхронизированы.Помните об этом.

Пожалуйста, просмотрите сайт developers.android для безболезненного использования потоков ... прежде чем увидеть ваш полезный код.

private void myMethod(){
        ImageView image01 = (ImageView) findViewById(R.id.image01);
        image01.setOnClickListener(new OnClickListener() {
              @Override
              public void onClick(View v) {
              //When you click on image it change!
              image01.setImageResource(R.drawable.newImage);
              checkGame(image01);
              }
        });
}


private void checkGame(ImageView img){
        try{
          // Thread.sleep(1000);  

           if(condition)
         image01.postDelayed(new Runnable() {                   
                    @Override
                    public void run() {
                                 image01.setImageResource(R.drawable.oldImage);

}
                }, 2000);              

        }catch (Exception e) {
          e.printStackTrace();
        }
}
...