Виджет не обновляет представления

1

Таким образом, в основном мои обновления Widget, в соответствии с моим LogCat, и TextView в моем макете виджетов не являются. Он обновляется при первом запуске, но то, что я пытаюсь сделать, это обновить его искусственно, используя намерение после BrocastReceiver. Цель работает нормально, onUpdate запускается после onReceive, но текст не обновляется. Я чувствую, что это связано с тем, что используется другой контекст, AppWidgetManager или appWidgetIds.

Вот мои методы:

String sent = "0";

@Override
public void onReceive(Context context, Intent intent){
    String action = intent.getAction();
    if(action != null && action.equals("27")){
        Log.i("Updating", "UPDATING WIDGET");
        sent = intent.getStringExtra("Sent");
        onUpdate(context,AppWidgetManager.getInstance(context),
                new int[]{0});
    }
    super.onReceive(context, intent);
}


@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds){
    Log.i("Widget","onUpdate");
    String begin = "Sent ";
    String end = " Texts Since Last Visit";
    final int N = appWidgetIds.length;
    for(int i = 0 ; i < N; i++){
        int widgetId = appWidgetIds[i];

        Intent intent = new Intent(context,History.class);
        PendingIntent pi = PendingIntent.getActivity(context, 0, intent, 0);

        RemoteViews views = new RemoteViews(context.getPackageName(),
                R.layout.widget_layout);

        views.setOnClickPendingIntent(R.id.LLwidget, pi);
        Log.i("Widget","Sent: " + sent);
        views.setTextViewText(R.id.SentTextView, begin + sent + end);
        appWidgetManager.updateAppWidget(widgetId, views);
    }
}

Manifest:

 <receiver android:name="MyWidgetProvider">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider"
            android:resource="@xml/widget_info"/>
    </receiver>

widget_info:

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
  xmlns:android="http://schemas.android.com/apk/res/android" 
  android:updatePeriodMillis="30000" 
  android:initialLayout="@layout/widget_layout" 
  android:minHeight="72dip" 
  android:minWidth="146dip">

</appwidget-provider>

Я думаю, что это вся необходимая информация, учитывая, что я точно знаю, что намерение работает и работает onUpdate.

Надеюсь, кто-то может мне помочь, потому что это моя первая попытка виджета, и мой мозг немного измотан из-за отсутствия сна над этим. Благодарю, Брэндон

Теги:
textview
widget
android-intent

1 ответ

2
Лучший ответ

Вы передаете 0 в качестве идентификатора виджета приложения. Скорее всего, это не действительный идентификатор виджета приложения. Либо используйте соответствующий идентификатор виджета приложения (например, тот, который вы добавили в дополнение к Intent вы прикрепляете к событию клика), или используйте версию updateAppWidget(), которая не принимает идентификатор виджета приложения.

  • 0
    Хорошо, спасибо, я понял, но не знал, как это исправить. Надеюсь, с этой информацией я могу прийти к выводу
  • 0
    Исправлена проблема с получением AppWidgetIds с использованием имени компонента и экземпляра AppWidgetManager provider = new ComponentName(context,MyWidgetProvider.class); AppWidgetManager.getInstance(context).getAppWidgetIds(provider);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню