中实现CountDownTimer

中实现CountDownTimer

我想在小部件中实现CountDownTimer。我想出的是:

import android.content.Intent;
import android.os.CountDownTimer;
import android.widget.RemoteViews;
import android.widget.TextView;

public class CountDown extends CountDownTimer {
    private RemoteViews views;

    public CountDown(long millisInFuture, int countDownInterval, RemoteViews views) {
        super(millisInFuture, countDownInterval);

        this.views = views;
    }

    @Override
    public void onFinish() {
    }

    @Override
    public void onTick(long millisUntilFinished) {
        int days = (int) (millisUntilFinished / (1000 * 60 * 60 * 24));

            views.setTextViewText(R.id.countWidget, days);
    }
}


还有AppWidgetProvider类

import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;
import android.widget.TextView;

public class CountDownWidgetProvider extends AppWidgetProvider {
    private Calendar currentDate = Calendar.getInstance();
    private Calendar firstDecember = Calendar.getInstance();

    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        Date date = new Date();

        this.firstDecember.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
        this.currentDate.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
        this.firstDecember.set(2012, 11, 1, 0, 0, 0); // TODO: Set to December
        this.currentDate.setTime(date);

        final int N = appWidgetIds.length;

        // Perform this loop procedure for each App Widget that belongs to this provider
        for (int i=0; i<N; i++) {
            int appWidgetId = appWidgetIds[i];

            // Create an Intent to launch MainActivity
            Intent intent = new Intent(context, MainActivity.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

            // Get the layout for the App Widget and attach an on-click listener
            // to the button
            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.count_down_app_widget);
            views.setOnClickPendingIntent(R.id.countWidget, pendingIntent);

            long millis = this.firstDecember.getTimeInMillis() - this.currentDate.getTimeInMillis();

            CountDown countDown = new CountDown(millis, 1000, views);
            countDown.start();

            // Tell the AppWidgetManager to perform an update on the current app widget
            appWidgetManager.updateAppWidget(appWidgetId, views);
        }
    }
}


但这不是那样的。小部件TextView不会刷新,甚至不会更改。倒数计时似乎没有开始。

也许我在某个地方犯了一个错误,但是我是android开发的新手,所以我认为您可以为我提供帮助。

最佳答案

you have to update widget after setting the text
use
 appWidgetManager.updateAppWidget(appWidgetId, views);


 after
  views.setTextViewText(R.id.countWidget, days);

关于android - 在AppWidgetProvider中实现CountDownTimer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13593046/

10-12 06:13