0

メインアクティビティにTimer()を実装しようとしています。しかし、どういうわけかそれは私が期待するように機能していません。キーコードのセクションをお見せします。エラー:アイコンは変更されません

public class X extends Activity {
       private Timer timer = new Timer () ;
       setContentView(R.layout.main);
       public void onCreate(Bundle a) {
              //..
              timer.scheduleAtFixedRate( new Device(),  1000, 1000  );

       }

}

public class Device extends TimerTask {
       Image e;
       View w;
       public void run() {
           e = ( ImageView ) w.findViewById(R.id.imageView1);
           if ( isVolited ( ))
                   e.setBackground(w.getResources().getDrawable(R.drawable.icon1));
               else
                   e.setBackground(w.getResources().getDrawable(R.drawable.icon2));

ログ:

 01-29 14:25:51.175: E/TabletStatusBar(2172): closing mini mode apps panel
 01-29 14:25:51.255: E/TabletStatusBar(2172): closing mini mode apps panel
 01-29 14:25:56.510: E/lights(2051): write_int failed to open /sys/class/sec/sec_touchkey/brightness
 01-29 14:25:59.105: E/lights(2051): write_int failed to open /sys/class/sec/sec_touchkey/brightness
 01-29 14:26:00.060: E/TODmobile(3509): onReceive action=android.intent.action.TIME_TICK
 01-29 14:26:00.060: E/TODmobile(3509): hour : 14    minute : 26
 01-29 14:26:00.060: E/DigitalClockWidget(3509): updateWidgets
 01-29 14:26:00.065: E/TODmobile(3509): hour : 14    minute : 26
 01-29 14:26:10.725: E/Watchdog(2051): !@Sync 504
4

2 に答える 2

2

ワーカースレッドからUIスレッドを更新することはできません。UIスレッドを更新するには、ハンドラーまたはAysnタスクを使用する必要があります。

handler.post(new Runnable() {

                    @Override
                    public void run() {
                               e.setBackground(w.getResources().getDrawable(R.drawable.icon1));


                    }
                });
于 2013-01-29T12:26:57.597 に答える
1

このコードを試してみてください、それは機能しています

Timer time = new Timer();
TimerTask doThis;

int delay = 1000; // delay for 5 sec.
int period = 1000; // repeat every sec.
doThis = new TimerTask() {
    public void run() {

        e = (ImageView) findViewById(R.id.imageView1);

        runOnUiThread(new Runnable() {
            public void run() {


                e.setImageResource(R.drawable.ic_launcher);

            }

        });

    }
};
time.scheduleAtFixedRate(doThis, delay, period);
于 2013-01-29T13:07:45.517 に答える