Widget de la pantalla de inicio de Android: RemoteViews setRemoteAdapter (…) método no funciona en API 11+

Por lo tanto, las llamadas al método onUpdate

remoteViews.setRemoteAdapter(id, R.id.listview, intent)

Para aplicar un adaptador al listview en el widget.

Hay un botón en el encabezado del widget que puede cambiar qué conjunto de datos se muestra por el listview (piense en la bandeja de entrada, bandeja de salida, estrellas, etc para un widget hipotético de correo electrónico). Cuando hago clic en ese botón, lleva al usuario a una actividad que les permite elegir qué conjunto de datos se mostrará. Cuando se realiza la selección, se ejecuta el siguiente código:

 Intent intent = new Intent(this, WidgetReceiver.class); intent.setAction("android.appwidget.action.APPWIDGET_UPDATE"); intent.putExtra("notify", true); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] {R.xml.widget_provider}); sendBroadcast(intent); 

Esto llama con éxito al método onUpdate en la clase AppWidgetProvider del widget. Sin embargo, si tuviera que alternar entre diferentes tipos de conjuntos de datos, después de 2-3 cambios de preferencia, el método setRemoteAdapter simplemente deja de funcionar. He ampliamente registrado el proceso, y el método, que se supone que llamar a un servicio que a su vez carga la clase RemoteViewsService.RemoteViewsFactory para rellenar el widget y su adaptador, no hace ninguna de estas cosas. Las primeras veces que cambia la preferencia, funciona como se esperaba. Pero después se cierra.

¿Alguien tiene alguna idea de lo que está pasando aquí?

Extraño, pero encontré una solución. Android parece almacenar en caché las intenciones que usa en su método onUpdate. Si vuelve a enviar lo que parece ser la misma intención, no funcionará como esperabas.

Solución: tenga un entero iterante estático que usted incluya como param en los extras de la intención. Resolvió el problema para mí.

 Intent intent = new Intent(context, WidgetService.class); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, currentWidgetId); intent.putExtra("random", randomNumber); randomNumber++; intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 

Oh, Android …

Me enfrenté a este problema hace algún tiempo. Este enfoque con un número aleatorio me ayudó también.

  • Si un texto en un TextView es más largo que el espacio disponible, ¿cómo obtener las líneas restantes?
  • Android: abra una nueva actividad en los clics de listview
  • Cómo cambiar la altura de la vista de lista progmmatically ..?
  • Cómo deshabilitar el widget updatePeriodMillis?
  • Widget onUpdate llamado cuando se inicia la Actividad de configuración
  • Título de Autoscrollable en Android Actionbar (Marquee)
  • Manejando ese molesto "java.lang.IndexOutOfBoundsException: getChars (5 ... 0) tiene fin antes de empezar" bug
  • Restaurar el estado del widget de vista de búsqueda de android
  • El menú de opciones de ActionBarSherlock y el error / advertencia: java.lang.ClassNotFoundException: res / drawable-mdpi / ic_go_search_api_holo_light.png
  • Restablecimiento del valor del widget de búsqueda (SearchView)
  • Cómo depurar con Android App Widget?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.