我正在尝试动态更新我的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.TextClock
有setFormat24Hour(CharSequence format)
方法标记为@RemotableViewMethod
。
有什么我想念的吗?为什么这不起作用?
答案 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);