2011-07-12 7 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が動作します。

これは私がウィジェットで初めて試みたものであり、私の脳はこれ以上の睡眠不足のために少し悩まされているので、誰かが助けてくれることを願っています。 ありがとう、 ブランドン

答えて

2

あなたはアプリウィジェットIDとして0を渡しています。おそらく、それは有効なアプリウィジェットIDではありません。適切なアプリウィジェットID(たとえば、クリックイベントにアタッチするIntentを追加したもの)を使用するか、アプリウィジェットIDを使用しないupdateAppWidget()のバージョンを使用してください。

+0

ありがとう、私は考えましたが、これを修正する方法はわかりませんでした。この情報をうまく使うと結論に至ることができます – Brandon

+0

コンポーネント名とAppWidgetManagerのインスタンスを使用してAppWidgetIdsを取得することで問題を解決しました 'provider = new ComponentName(context、MyWidgetProvider.class); ' ' AppWidgetManager.getInstance(context) .getAppWidgetIds(プロバイダ); ' – Brandon

関連する問題