1

作業中のウィジェットがあります。これにより、ユーザーは画面にウィジェットのインスタンスを複数持つことができます。各ウィジェットIDは、独自の構成ファイルを維持します。ただし、奇妙な理由で、ウィジェットIDごとにボタンを個別に設定するコードが機能せず、最初のウィジェットIDのみが個々のウィジェットにリンクされます。以下は、責任のあるコードです。誰かが問題がどこにあるかを見ることができますか?

private void TieClicks(Context context){
  RemoteViews rViews;
  PendingIntent editPendingIntent= null;

//  Intent updateintent = new Intent(context,SyncNoteWidget.class);
//  updateintent.setAction(SyncNote_Action_Widget_Update);
//  PendingIntent pendingupdateintent = PendingIntent.getBroadcast(context, 0, updateintent, 0);
//  rViews.setOnClickPendingIntent(R.id.widgettextview , pendingupdateintent);
//  
  AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
  int[] ids = appWidgetManager.getAppWidgetIds(new ComponentName(context, SyncNoteWidget.class));
  for (int i =0;i< ids.length;i=i+1){
   int wId = ids[i];
   rViews = new RemoteViews(context.getPackageName(),R.layout.widget);

   editPendingIntent = makeControlPendingIntentActivity(context, wId);
   Log.v("syncnote", "tieing " + String.valueOf(wId));
   rViews.setOnClickPendingIntent(R.id.widgeteditbutton , editPendingIntent);
   appWidgetManager.updateAppWidget(wId, rViews);

   editPendingIntent= null;

  }
 }
 private PendingIntent makeControlPendingIntentActivity(Context context,int appWidgetId) {

     Intent active = new Intent(context, EditNote.class);
     active.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK );
     active.setAction(com.ntu.way2fungames.syncnote.SyncNoteWidget.SyncNote_Action_Edit); 
     active.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
     return(PendingIntent.getActivity(context, 0, active, 0 ));
    }
4

2 に答える 2

1

問題は、何らかの理由で「PendingIntent.getActivity」が最初のPendingIntentを再利用していたことでした。神はその理由を知っています。修正は以下のとおりです。呼び出しにランダムなデータを追加するだけです。

private PendingIntent makeControlPendingIntentActivity(Context context,int appWidgetId) {
        Intent active = null;
        active = new Intent(context, EditNote.class);
        active.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK );
        active.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK );
        active.setAction(com.ntu.way2fungames.syncnote.SyncNoteWidget.SyncNote_Action_Edit); 
        active.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
        PendingIntent pi =PendingIntent.getActivity(context,(int)(Math.random()*10000), active, 0 );
        Log.v("syncnote", "PI: "+pi.toString());
        return(pi);
    }
于 2010-09-23T18:33:41.657 に答える
0

作成しているログエントリを含めると、次のようになります。

  Log.v("syncnote", "tieing " + String.valueOf(wId));

それは重要な質問に答えることができます:int [] idsにはいくつの値がありますか?

R.layout.widgetには何が含まれていますか?

ウィジェットの写真も役立ちます。写真は千の言葉の価値があります...

于 2010-09-18T09:57:18.280 に答える