2013-03-31 2 views
0

У меня есть виджет им пытаются обновить TextView с помощью таймера:Widget обновление TextView таймер не работает

public void onUpdate(Context context, final AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    final int N = appWidgetIds.length; 

    for (int i = 0; i < N; i++) { 
     final int appWidgetId = appWidgetIds[i]; 

     Intent clockIntent = new Intent(context, DeskClock.class); 
     PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, clockIntent, 0); 

     final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.digitalclock); 
     views.setOnClickPendingIntent(R.id.rl, pendingIntent); 

     Timer timer = new Timer(); 
     timer.scheduleAtFixedRate(new TimerTask() { 

      @Override 
      public void run() { 
       java.util.Date noteTS = Calendar.getInstance().getTime(); 
       String time = "kk:mm"; 
       String date = "dd MMMMM yyyy"; 

       views.setTextViewText(R.id.tvTime, DateFormat.format(time, noteTS)); 
       views.setTextViewText(R.id.tvDate, DateFormat.format(date, noteTS)); 
       appWidgetManager.updateAppWidget(appWidgetId, views); 
      } 
     }, 0, 1000);// Update textview every second 

    } 
} 

Проблема в том, что только обновляет один раз и никогда впоследствии. Где я иду не так?

ответ

2

Вы должны использовать Обработчик, чтобы воздействовать на поток пользовательского интерфейса из timertask.

Timer timer = new Timer(); 
    timer.scheduleAtFixedRate(new TimerTask() { 

     @Override 
     public void run() { 

       handler.post(new Runnable() { 
         public void run() { 
       //Your code here 
      }}); 
     } 
    }, 0, 1000);// Update textview every second 

Кроме того, вы должны начать Handler в OnCreate(), как этот

обработчика = новый обработчик();

+0

Благодаря Айв получил это работает, но он теперь обновляется на некоторое время, а затем останавливается. Ive запустил новый вопрос, если вы можете помочь: http://stackoverflow.com/questions/15725283/widget-update-textview-timer-not-working – Timmo

1
int _count=0; 
    _tv = (TextView) findViewById(R.id.textView1); 
    _tv.setText("red"); 
    _t = new Timer(); 

    _t.scheduleAtFixedRate(new TimerTask() { 
      @Override 
      public void run() { 
       _count++; 

       runOnUiThread(new Runnable() //run on ui thread 
       { 
        public void run() 
        { 
        _tv.setText(""+_count); 
       } 
       }); 
      } 
     }, 1000, 1000); 
Смежные вопросы