无法在Widget中调用TextClock的setFormat24Hour

时间:2014-03-31 21:40:11

标签: android android-widget

我正在尝试动态更新我的Widget的TextClock的format24Hour

为此,我正在使用RemoteViews:

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.clockwidget);
views.setString(R.id.textclock, "setFormat24Hour", formatString24.toString());
appWidgetManager.updateAppWidget(appWidgetId, views);

然而,这导致我的Widget显示“Problem loading Widget”和logcat显示

 03-31 17:37:19.872: W/AppWidgetHostView(1408): updateAppWidget couldn't find any view, using error view
 03-31 17:37:19.872: W/AppWidgetHostView(1408): android.widget.RemoteViews$ActionException: view: android.widget.TextClock doesn't have method: setFormat24Hour(class java.lang.String)

但是,我很确定android.widget.TextClocksetFormat24Hour(CharSequence format)方法标记为@RemotableViewMethod

有什么我想念的吗?为什么这不起作用?

2 个答案:

答案 0 :(得分:4)

感谢njzk2,我找到了解决方案。这是一个相当愚蠢的问题。 我需要调用RemoteViews#setCharSequence而不是setString,然后一切正常!

答案 1 :(得分:0)

我知道这个问题已在几个月前被问过,但我认为你自己的回答实际上是错误的。

如API指南中所述,appwidget上允许的唯一类是:

AnalogClock
Button
Chronometer
ImageButton
ImageView
ProgressBar
TextView
ViewFlipper
ListView
GridView
StackView
AdapterViewFlipper

因此,您需要一个alarmManager,在屏幕打开时每隔一分钟,每分钟或每小时更新一次窗口小部件,具体取决于您的需要。

更新窗口小部件时,您必须将文本视图的文本更改为实际时间。您可以按如下方式格式化此时间:

RemoteViews views = new RemoteViews(context.getPackageName(), viewID);
Calendar c = Calendar.getInstance();
SimpleDateFormat timeFormat24 = new SimpleDateFormat("kk:mm");
String time24 = timeFormat24.format(c.getTime());
views.setTextViewText(R.id.textClock, time24);

See this link for more information on the formatting.