0
所以我做了一個sorta計時器小部件,從sqlite數據庫中獲取信息。當數據庫中只有1個條目時,看起來像預期的那樣工作,但當存在多於1個時,小部件似乎在值之間閃爍。例如。 1秒鐘你會看到第一個值,那麼下一個第二個值將是下一個值等等。這裏是代碼,請注意命令fetchDecks(5),它查看提醒值,如果它超過當前時間,它不會顯示。所以一旦進入1時間到了,它應該移動到條目2上。Android小部件更新奇怪w/sqlite數據庫
public class MyWidgetProvider extends AppWidgetProvider {
private DBadapter mDbHelper;
Cursor note;
private long reminder;
private String title, summary;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
mDbHelper = new DBadapter(context);
mDbHelper.open();
note = mDbHelper.fetchDecks(5);
note.moveToFirst();
reminder = note.getLong(
note.getColumnIndexOrThrow(mDbHelper.KEY_REMINDER));
title = note.getString(
note.getColumnIndexOrThrow(mDbHelper.KEY_TITLE));
summary = note.getString(
note.getColumnIndexOrThrow(mDbHelper.KEY_SUMMARY));
Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTime(context, appWidgetManager), 1, 1000);
}
private class MyTime extends TimerTask {
RemoteViews remoteViews;
AppWidgetManager appWidgetManager;
ComponentName thisWidget;
public MyTime(Context context, AppWidgetManager appWidgetManager) {
this.appWidgetManager = appWidgetManager;
remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
thisWidget = new ComponentName(context, MyWidgetProvider.class);
}
@Override
public void run() {
long current = System.currentTimeMillis();
long diff = reminder - current;
remoteViews.setTextViewText(R.id.TextView01, countDown(diff));
remoteViews.setTextViewText(R.id.update, title);
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
}
private String countDown(long result) {
String mMinutes,mSeconds,mHours, mDays;
int seconds = (int) (result/1000) % 60 ;
if (seconds == 0) {
mSeconds = "0" + Integer.toString(seconds);
}
else if (seconds <= 9) {
mSeconds = "0" + Integer.toString(seconds);
} else {
mSeconds = Integer.toString(seconds);
}
int minutes = (int) ((result/(1000*60)) % 60);
if (minutes == 0) {
mMinutes = "0" + Integer.toString(minutes);
}
else if (minutes <= 9) {
mMinutes = "0" + Integer.toString(minutes);
} else {
mMinutes = Integer.toString(minutes);
}
int hours = (int) ((result/(1000*60*60)) % 24);
if (hours == 0) {
mHours = "0" + Integer.toString(hours);
}
else if (hours <= 9) {
mHours = "0" + Integer.toString(hours);
} else {
mHours = Integer.toString(hours);
}
int days = (int) (result/(1000*60*60*24));
if (days == 0) {
mDays = "0" + Integer.toString(days);
}
else if (days <= 9) {
mDays = "0" + Integer.toString(days);
} else {
mDays = Integer.toString(days);
}
String tRemaining = mDays + " days | " + mHours + " hours | " + mMinutes + " mins | " + mSeconds + " secs";
return tRemaining;
}
}
}
請顯示'fetchDecks'。 – 2013-03-23 17:44:42