【发布时间】:2011-07-20 20:56:08
【问题描述】:
我有一个小部件,用于在每次收到更新广播时更改其图标。但是,小部件永远无法正确显示其图标,显示文本“问题加载小部件”。 Logcat 消息是:
WARN/AppWidgetHostView(612): updateAppWidget couldn't find any view, using error view
WARN/AppWidgetHostView(612): android.widget.RemoteViews$ActionException: can't find view: 0x7f060003
我的 onUpdate 的代码是:
public class ImageWidgetProvider extends AppWidgetProvider{
private static final String TAG = "Steve";
public static final int[] IMAGES = { R.drawable.ic_launcher_alarmclock,
/*and many more*/};
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){
for (int appWidgetId : appWidgetIds) {
Log.d(TAG, "onUpdate:");
int imageNum = (new java.util.Random().nextInt(IMAGES.length));
Log.d(TAG, Integer.toString(IMAGES[imageNum]));
RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.widget);
remoteView.setImageViewResource(R.id.image_in_widget, IMAGES[imageNum]);
appWidgetManager.updateAppWidget(appWidgetId, remoteView);
}
}
}
现在,当我将鼠标悬停在“R.id.image_in_widget”上时,它会显示其值等于 0x7f060003 - 根据 Logcat 无法找到的视图。使用第二条 Log 语句,我验证了 IMAGES[imageNum] 确实引用了 IMAGES 数组中的随机图像。 (如果它很重要,它会以十进制值而不是十六进制值的形式出现。)任何想法我做错了什么?非常感谢!
--
编辑:这是小部件的布局文件,其中声明了 image_in_widget ImageView。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView android:name="@+id/image_in_widget"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
【问题讨论】:
-
真的很奇怪。看来你做的一切都是对的。您在布局文件中使用允许的 UI 组件,它应该可以正常工作。这个“问题加载小部件”会在您将小部件放在屏幕上后立即显示,对吗?我真的不知道是什么原因......对不起。也许尝试在 1.6 模拟器上运行您的小部件?
-
是的,“问题加载小部件”立即显示。在 v1.6 模拟器中相同。感谢您的尝试 - 我很高兴看到不只是我认为这很奇怪 :)