Подтвердить что ты не робот

После того, как кнопки изменения ориентации на виджете не отвечают

Возможный дубликат:
После того, как кнопки изменения ориентации в виджете не отвечают

У меня возникла проблема с приложением AppView, которое имеет один ImageView внутри макета xml, для которого я регистрирую ожидающий запрос, который обрабатывается в методе OnReceive. Все работает нормально, пока я не изменю ориентацию телефона. На данный момент виджет больше не работает, я нажимаю на изображение, но ничего не происходит. Эта проблема в точности такая же: После того, как кнопки изменения ориентации в виджете не отвечают

В чем проблема и как можно решить проблему? Спасибо.

4b9b3361

Ответ 1

В конечном итоге мне удалось восстановить бесплатное решение OP. Здесь секрет для записи: При каждом обновлении удаленных представлений вы должны обновлять все, что вы когда-либо обновляете. Мое приложение обновляло некоторые визуальные элементы, но не снова настраивало обработчик кнопок. Это заставило обработчика перестать работать - не сразу - только после изменения вращения, следовательно, путаницы.

Если это сделано правильно, вам не нужно перехватывать трансляции смены конфигурации, последние удаленные просмотры, которые вы установили, будут использоваться снова после вращения. Для вашего AppWidgetProvider не требуется вызов.

Ответ 2

У меня была аналогичная проблема, но мое приложение теперь хорошо работает с решением, предложенным Alex

"... решается без помощи службы, просто устанавливая снова setOnClickPendingIntent в методе OnReceive"

Я отслеживал метод onReceive, и он вызывается каждый раз, когда я меняю ориентацию своего устройства, поэтому я снова вызвал конфигурацию моего виджета в методе onReceive.

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

Спасибо.

Ответ 3

Всякий раз, когда вы обновляете внешний вид вашего виджета (используя либо Activity, либо ваш широковещательный приемник [поставщик виджета приложений]), вы также должны переназначить все PendingIntents для обработчиков кликов, а затем вызвать updateAppWidget() как обычно.

Пример с setTextViewText():

// This will update the Widget, but cause it to
// stop working after an orientation change.
updateWidget()
{
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
remoteViews.setTextViewText(R.id.widget_text_view, "Updated widget");

appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
}


// This is the correct way to update the Widget,
// so that it works after orientation change.
updateWidget()
{
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
remoteViews.setTextViewText(R.id.widget_text_view, "Updated widget");

Intent intent = new Intent(context, MyWidgetActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, ...);
remoteViews.setOnClickPendingIntent(R.id.widget_click_button, pendingIntent);

appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
}