android - 如何将特定的未决 Intent 绑定(bind)到多窗口小部件上特定窗口小部件上的特定按钮.. appwidget?

标签 android widget android-appwidget

我有一个我正在使用的小部件,它允许用户在他的屏幕上拥有多个小部件实例。每个 Widget 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 ));
    }

最佳答案

问题是出于某种原因,“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);
    }

关于android - 如何将特定的未决 Intent 绑定(bind)到多窗口小部件上特定窗口小部件上的特定按钮.. appwidget?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3740580/

相关文章:

android - AppWidget 按钮 onClick 停止工作

android - 以编程方式更改 appWidget 的高度?

java - MotionEvent.ACTION_UP 未被调用

android - MvvmCross:如何以编程方式构建带有自定义适配器的 MvxListView?

android - 在适用于 Android 的 Xamarin.Forms 上使用 Google map

c++ - EnhTableWidget 字段的值更改(返回前)时发出信号

android - 使用 App Widget 的 TouchDelegate?

java - 如何在 root 设备上调用 Android 中的 J2SE JVM 之类的 Java 类?

来自广播接收器的android更新小部件

Python Tkinter Frame 小部件选项(视觉和类)