2011-01-01 18 views
12

Duplicar posibles:
After orientation change buttons on a widget are not respondingbotones de cambio de orientación en un widget no responden

estoy frente a un problema con un appwidget que tiene una ImageView dentro del diseño xml para los cuales Registro un pendienteintent que se maneja en el método OnReceive. Todo funciona bien hasta que cambie la orientación del teléfono. En este punto, el widget ya no funciona, hago clic en la imagen, pero no sucede nada. Este problema es exactamente el de aquí: After orientation change buttons on a widget are not responding

¿Cuál es el problema y cómo se puede resolver? Gracias.

+0

Hola, me contestó el problema que ha identificado en el enlace informados. Cuando gira la pantalla, hace que se vuelva a crear el widget. Cuando se recrea el widget, debe volver a vincular los manejadores de clic, es decir. adjunte los eventos de clic pendientes nuevamente. Es por eso que el servicio funciona bien para este escenario. Captura el evento onConfigurationChanged y vuelve a vincular los controladores a los componentes de la interfaz de usuario. – jagsaund

+1

Gracias, resuelto sin la ayuda de un servicio, simplemente configurando de nuevo setOnClickPendingIntent en el método OnReceive. – Alex

+1

¿Puede decirnos cómo recibió onReceive() para solicitar un cambio de orientación? Estoy teniendo el mismo problema, pero mi AppWidgetProvider.onReceive() no se llama para este evento. –

Respuesta

9

Eventualmente logré recrear la solución sin servicio del OP. Aquí está el secreto para el registro: Cada vez que actualice las vistas remotas, debe actualizar todo lo que haya actualizado. Mi aplicación estaba actualizando algunos elementos visuales, pero no configuraba el manejador de botones nuevamente. Esto hizo que el controlador dejara de funcionar, no de inmediato, solo después de un cambio de rotación, de ahí la confusión.

Si esto se hace correctamente, no es necesario interceptar las transmisiones de cambio de configuración, las últimas vistas remotas que configure se usarán nuevamente después de la rotación. No se necesita llamar a su AppWidgetProvider.

2

tuve un problema similar, pero mi aplicación está funcionando bien ahora con la solución sugerida por Alex

" ... resolver sin la ayuda de un servicio, sólo la creación de nuevo el setOnClickPendingIntent en el OnReceive Método "

Seguí el método onReceive y se llama cada vez que cambio la orientación de mi dispositivo, así que volví a llamar a la configuración de mi widget en el método onReceive.

De todos modos no estoy seguro de si esta es la mejor solución para resolver ese problema, si alguien conoce una mejor solución por favor comparta.

Gracias.

1

Cada vez que actualice el aspecto de su widget (utilizando una actividad o su Broadcast Receiver [App widget provider]), también debe reasignar todos los PendingIntents para los manejadores de clics y luego llamar al updateAppWidget() de forma normal.

Ejemplo con 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); 
} 
Cuestiones relacionadas