2013-08-08 8 views
2

일부 활동에서 위젯을 업데이트 할 때 목록 원격보기가 업데이트되지 않습니다. 앱 위젯 (로그 표시)의 onUpdate까지옵니다. 그러나 신선한 데이터로 그것을 팽창시키는리스트 뷰의 어댑터에는 들어 가지 않습니다.Android appwidget remoteviews가 업데이트되지 않음

public void onUpdate(Context context, AppWidgetManager appWidgetManager, 

int[] appWidgetIds) { 
    final int N = appWidgetIds.length; 
    for (int i = 0; i < N; i++) { 
     int appWidgetId = appWidgetIds[i]; 

     Log.e("called", "onupdate"); 

     RemoteViews views = new RemoteViews(context.getPackageName(), 
       R.layout.widget_lay); 

     views.setTextViewText(R.id.textView1, 
       "Floating Text will be displayed here .. Daily Thoughts"); 

     Intent intent = new Intent(context, RemoteServiceEmin.class); 
     intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
     views.setRemoteAdapter(R.id.gridview, intent); 

     // inflating list remote view 

     Intent intentlist = new Intent(context, ListInflater.class); 
     intentlist.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, 
       appWidgetId); 
     intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 
     views.setRemoteAdapter(R.id.listview, intentlist); 

     // setting onclick on gridview 
     Intent itemClickIntent = new Intent(context, MyWidgetProvider.class); 
     itemClickIntent.setAction(ITEM_CLICK_ACTION); 
     itemClickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, 
       appWidgetIds[i]); 
     PendingIntent itemClickPendingIntent = PendingIntent.getBroadcast(
       context, 0, itemClickIntent, 
       PendingIntent.FLAG_UPDATE_CURRENT); 
     views.setPendingIntentTemplate(R.id.gridview, 
       itemClickPendingIntent); 

     appWidgetManager.updateAppWidget(appWidgetId, views); 
    } 
    super.onUpdate(context, appWidgetManager, appWidgetIds); 

} 

답변

9

그래서 마침내 developer.android.com 덕분에 모두 완료되었습니다. 당신이해야 할 일은, 당신이 "업데이트"를 다루고 싶은 곳에서 방송의 의도를 방아쇠를 당기는 것입니다.

Intent initialUpdateIntent = new Intent(
       AppWidgetManager.ACTION_APPWIDGET_UPDATE); 
     initialUpdateIntent 
       .setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); 
     sendBroadcast(initialUpdateIntent); 

다음

else if (intent.getAction().equals(
      AppWidgetManager.ACTION_APPWIDGET_UPDATE)) { 

     AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); 

      ComponentName thisAppWidget = new ComponentName(context.getPackageName(), MyWidgetProvider.class.getName()); 
      int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisAppWidget); 
      appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.listviewnew); 
      Log.e("finally after a whole day", "working :"); 

    } 
+0

이 방법은 불안정하다 codesnippetbelow처럼

notifyAppWidgetViewDataChanged(). 

뭔가를 사용하여 리모트 뷰를 Appwidget의 onRecieve에 그것을 잡을 및 업데이트 : 1. 그것은 약 4 초 소요 AppWidgetProvider가 브로드 캐스트를 수신하기 위해; 2. 때로는 AppWidgetProvider가 단순히 브로드 캐스트를 수신 할 수 없습니다. 방법을 에서 사용하십시오. http://stackoverflow.com/a/7738687/903665 – skyin