我想为我的整个小部件布局设置一个setOnClickPendingIntent
,但我还没有找到一种方法来做到这一点。我想这是非常微不足道的事情,但我忽略了它。目前我正在为布局中的每个视图设置一个意图,这使我的代码非常混乱。这是我目前正在做的事情:
remView = new RemoteViews(ctxContext.getPackageName(), R.layout.initial);
Intent ittRetry = new Intent(ctxContext, SettingsActivity.class);
ittRetry.setAction(AppWidgetManager.ACTION_APPWIDGET_CONFIGURE);
ittRetry.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, intInstance);
PendingIntent pitRetry = PendingIntent.getBroadcast(ctxContext, 0, ittRetry, PendingIntent.FLAG_UPDATE_CURRENT);
remView.setOnClickPendingIntent(R.id.widget_rows, pitRetry);
remView.setOnClickPendingIntent(R.id.widget_message, pitRetry);
wigManager.updateAppWidget(intInstance, remView);
目前我正在为布局中的每个视图设置一个意图,这使我的代码非常混乱
但是,这是您唯一的选择。您必须为每个要通过单击控制的小部件调用setOnClickPendingIntent()
。
欢迎您使用循环,将您的小部件ID放在一个数组中并迭代该数组,在每次传递中调用setOnClickPendingIntent()
。
您可以在布局xml末尾的所有窗口小部件视图的顶部创建一个覆盖整个窗口小部件的透明按钮(match_parent非常重要!):
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"/>
并在您的小部件代码中引用它:
[...]
views.setOnClickPendingIntent(R.id.button, pendingIntent);
[...]
我对此问题的解决方案(原始问题之后的几年)是为主布局设置id。所以我的布局有一个RelativeLayout,它有一个id,我可以用它来挂起意图。