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

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

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

В чем проблема и как ее можно решить? Благодарю.

Solutions Collecting From Web of "После того, как кнопки изменения ориентации на виджете не отвечают"

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

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

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

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

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

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

Благодарю.

Всякий раз, когда вы обновляете внешний вид своего виджета (используя либо 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); } 

См. Здесь возможное объяснение или дальнейшие действия:

http://permalink.gmane.org/gmane.comp.handhelds.android.devel/98008

или

http://groups.google.com/group/android-developers/browse_thread/thread/578a4429c369c27c/273a53a96ddd10c5?lnk=gst&q=Widget+does+not+respond+when+phone+orientation+changes#273a53a96ddd10c5

Но пока не ясно, что такое истинное решение.