2

Updateブロードキャストを受信するたびにアイコンを変更するためのウィジェットがあります。ただし、ウィジェットがアイコンを正しく表示できず、「ウィジェットの読み込みに問題があります」というテキストが表示されます。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によると見つからないビューです。2番目のLogステートメントを使用して、IMAGES[imageNum]が実際にIMAGES配列からのランダムな画像を参照していることを確認しました。(重要な場合は、16進値ではなく10進値として出力されます。)私が間違っていることについて何か考えはありますか?どうもありがとう!

-

編集:これは、image_in_widgetImageViewが宣言されているウィジェットのレイアウトファイルです。

<?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>
4

3 に答える 3

2

これが発生するもう 1 つの理由 (この問題について Web を検索している場合、元のポスターよりも重要です):

横向きと縦向きに別々のレイアウトがある場合、更新中に参照するビューを 2 つのレイアウトの両方に含める必要があります。縦向きなど、1 つのモードでのみ存在するビューを参照すると、横向きでは、ウィジェット ボックスに「ウィジェットの読み込みに問題があります」というメッセージが表示されます。

簡単な解決策は、これらのビューを表示したくないモードで可視性を「GONE」に設定することです。

于 2010-07-11T05:05:35.330 に答える
1

Android 1.5 では、ウィジェットの OnDelete を呼び出さないという問題があります。

このコードを AppWidgetProvider に入れると、問題が解決するはずです

public void onReceive(Context context, Intent intent) {
    // v1.5 fix that doesn't call onDelete Action
    final String action = intent.getAction();
    if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) {
        final int appWidgetId = intent.getExtras().getInt(
                AppWidgetManager.EXTRA_APPWIDGET_ID,
                AppWidgetManager.INVALID_APPWIDGET_ID);
        if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
            this.onDeleted(context, new int[] { appWidgetId });
        }
    } else {
        super.onReceive(context, intent);
    }
}
于 2010-02-10T12:59:17.323 に答える
0

あなたの例では当てはまらないかもしれませんが、アプリケーションウィジェットでも同様の問題が発生しました。android 1.5では、ホーム画面ウィジェットに厄介な問題がありました。特定のケースでは、アプリケーションウィジェットはメモリ内でまだアクティブでしたが、表示されなくなりました。
appWidgetIdsを介して列挙しています。この配列に、予想されるIDの数が正確に含まれているかどうかを確認してください。別のLog.d()を配置してIDをログに記録するだけです。たぶん、あなたはいくつかの「ゴースト」ウィジェットも持っています。
どのAndroidバージョンを使用していますか?

于 2009-12-29T22:42:16.597 に答える