2011-07-26 4 views
2

RemoteViews를 사용하여 ListView를 표시하는 appwidget을 개발 중입니다. 간단하게, 나는 appwidget의 기능을 비유 할 것이다.안드로이드 - AppWidget AppWidgetManager.updateAppWidget() 즉시 호출되지 않음

  1. 사용자는 appwidget을 홈 스크린에 추가하도록 선택한다. 위젯을 선택하면 구성 활동이 시작되고 사용자는 래서 피 목록에서 하나의 래서 피 중에서 하나를 선택합니다.
  2. 구성 활동에서 구성을 선택하면 구성 활동이 AppWidgetManager.ACTION_APPWIDGET_UPDATE 인 텐트를 브로드 캐스트합니다. 이 인 텐트는 내 AppWidgetProvider 클래스의 onReceive 메소드에서 수신되고 처리됩니다. 여기에서 RemoteView는 인스턴스화되어 AppWidgetManager.updateAppWidget() 메소드로 전달됩니다. 이것은 재료의 ListView를 채우기 위해 진행됩니다.

이 모든 것은 예상대로 작동하지만, appwidget에서 ListView를 수동으로 업데이트하려고 시도하면 예외입니다. 구성 작업을 다시 시작하기 위해 PendingIntent를 설정했습니다.이 또한 작동합니다. 불행히도, AppWidgetManager.updateAppWidget()에 대한 호출은 홈 화면에 추가 할 때 실행될 때 즉시 호출되지 않고 ListView가 업데이트되지 않습니다. 그러나 목록을 아래로 스크롤 한 후에 업데이트가 호출됩니다 (캐시에로드 된 행 수가 전달 될 때까지). FlightBoardAppWidgetService 및 ViewsFactory가 정상적으로 실행됩니다. updateAppWidget이 느슨하게로드 된 대기열에 들어간 것처럼 보입니다. AppWidgetManager.updateAppWidget()이 코딩 된 방법을보기 위해 안드로이드 소스 코드를 보려고했지만 숨겨진 것 같습니다.

tl; dr : AppWidgetManager.updateAppWidget()이 항상 즉시 호출되는 것은 아닙니다.

실제로 호출 될 때 ListView를 업데이트 할 수있는 방법이 있습니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까? 감사!

답변

0

음, 결국 문제가 해결되었습니다. 그것은 다소 해킹이지만 새로 고침 방송과 업데이트 방송을 선언하여 문제를 해결했습니다. updateAppWidget()을 호출 한 다음 위의 브로드 캐스트를 수신하고 처리하는 함수에서 위젯을 업데이트 할 때마다 notifyChanged를 호출하는 다른 브로드 캐스트를 시작합니다. 이것은 항상 작동합니다!