2011-07-12 107 views
1

所以基本上我的小部件更新,根据我的LogCat,并且我的小部件的布局中的TextView不是。它首次启动时会更新,但我想要做的是在BrocastReceiver之后使用意图人为更新它。意图工作正常,onUpdate在onReceive之后运行,但文本未更新。我有一种感觉,它与使用不同的上下文,AppWidgetManager或appWidgetIds这一事实有关。小部件没有更新视图

这里是我的方法:

String sent = "0"; 

@Override 
public void onReceive(Context context, Intent intent){ 
    String action = intent.getAction(); 
    if(action != null && action.equals("27")){ 
     Log.i("Updating", "UPDATING WIDGET"); 
     sent = intent.getStringExtra("Sent"); 
     onUpdate(context,AppWidgetManager.getInstance(context), 
       new int[]{0}); 
    } 
    super.onReceive(context, intent); 
} 


@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
     int[] appWidgetIds){ 
    Log.i("Widget","onUpdate"); 
    String begin = "Sent "; 
    String end = " Texts Since Last Visit"; 
    final int N = appWidgetIds.length; 
    for(int i = 0 ; i < N; i++){ 
     int widgetId = appWidgetIds[i]; 

     Intent intent = new Intent(context,History.class); 
     PendingIntent pi = PendingIntent.getActivity(context, 0, intent, 0); 

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

     views.setOnClickPendingIntent(R.id.LLwidget, pi); 
     Log.i("Widget","Sent: " + sent); 
     views.setTextViewText(R.id.SentTextView, begin + sent + end); 
     appWidgetManager.updateAppWidget(widgetId, views); 
    } 
} 

清单:

<receiver android:name="MyWidgetProvider"> 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
     </intent-filter> 
     <meta-data android:name="android.appwidget.provider" 
      android:resource="@xml/widget_info"/> 
    </receiver> 

widget_info:

<?xml version="1.0" encoding="utf-8"?> 
<appwidget-provider 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:updatePeriodMillis="30000" 
    android:initialLayout="@layout/widget_layout" 
    android:minHeight="72dip" 
    android:minWidth="146dip"> 

</appwidget-provider> 

我认为这是所有考虑我肯定知道的必要信息的意图作品和onUpdate运行。

希望有人可以帮助我,因为这是我第一次尝试使用小部件,而且由于缺乏睡眠,我的大脑有点疲惫。 谢谢, Brandon

回答

2

您正在传递0作为应用部件ID。很可能,这不是有效的应用部件ID。您可以使用适当的应用部件ID(例如,您将其添加到附加到点击事件的Intent中)或使用不包含应用部件ID的版本updateAppWidget()

+0

好的谢谢,我想,但不知道解决这个问题的方法。希望通过这些信息我可以得出结论 – Brandon

+0

通过使用组件名称和AppWidgetManager的实例来获取AppWidgetId来解决问题提供者=新组件名称(上下文,MyWidgetProvider.class);' 'AppWidgetManager.getInstance(context) .getAppWidgetIds(提供商);' – Brandon