위젯은 업데이트 브로드 캐스트를 수신 할 때마다 아이콘을 변경하기위한 것입니다. 그러나 위젯은 아이콘을 제대로 표시하지 못하며 "문제로드 위젯"이라는 텍스트를 표시합니다. 로그 캣 메시지는 다음과 같습니다위젯의 아이콘을 onUpdate에서 변경하기
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 배열의 임의 이미지를 참조하는지 확인했습니다. (중요한 경우, 16 진수가 아닌 10 진수 값으로 나타납니다.) 내가 잘못하고있는 아이디어가 있습니까? 고마워요!
-
편집 : 여기에 image_in_widget의 이미지 뷰가 선언 된 위젯의 레이아웃 파일입니다.
<?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 에뮬레이터에서 위젯을 실행하려고합니까? – Ramps
예, "문제로드 위젯"이 즉시 표시됩니다. v1.6 에뮬레이터와 동일합니다. 시도해 줘서 고마워요 -이게 이상하다고 생각하는 사람이 아니란 걸 알게되어 기쁩니다. –