如何为整个窗口小部件布局设置setOnClickPendingIntent?

时间:2013-10-27 11:00:14

标签: java android android-widget android-pendingintent

我想为我的整个小部件布局设置一个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);

3 个答案:

答案 0 :(得分:1)

  

目前我正在为布局中的每个视图设置一个意图,这使我的代码非常混乱

然而,这是你唯一的选择。您必须为每个要通过单击控制的小部件调用setOnClickPendingIntent()

欢迎您使用循环,将您的窗口小部件ID放入数组并迭代该数组,在每次传递中调用setOnClickPendingIntent()

答案 1 :(得分:0)

您可以在布局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);
[...]

答案 2 :(得分:0)

我对此问题的解决方案(比原始问题晚了几年)是为主版式设置ID。所以我的布局有一个RelativeLayout,并且有一个ID,我可以将其用于待处理的意图。