Android添加小部件后单击小部件不起作用

时间:2011-03-02 12:14:39

标签: android widget add clickable

prefs.java

            Intent resultValue = new Intent();
            resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
            setResult(RESULT_OK, resultValue);

            Context context = getApplicationContext();

            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
            Intent configIntent = new Intent(context, Prefs.class);
            configIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);

            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, configIntent, 
                                                            PendingIntent.FLAG_UPDATE_CURRENT);

            views.setOnClickPendingIntent(R.id.callbackwidget, pendingIntent);

            AppWidgetManager.getInstance(context).updateAppWidget(appWidgetId, views);

widget.xml

问题是当我添加小部件时,它不是可以点击的。重新启动手机后,它正常工作。在部署新的构建版本之后,小部件也可以点击

任何想法?

2 个答案:

答案 0 :(得分:2)

大。问题出在 NOT SENDING ACTION_APPWIDGET_UPDATE。所以在关闭偏好之前我发送广播:

Intent updateIntent = new Intent(this, CallBackWidget.class);
updateIntent.setAction("PreferencesUpdated");
updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
sendBroadcast(updateIntent);

并且在小部件的onreceive方法中我检查广播

if ("PreferencesUpdated".equals(action)) {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
int appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
appWidgetManager.updateAppWidget(appWidgetId, views);
int[] appWidgetIds = new int[] {appWidgetId};
onUpdate(context, appWidgetManager, appWidgetIds);
        }           

现在它就像一个魅力;)

答案 1 :(得分:1)

可能是您为小部件设置了配置屏幕。如果是这样,那么第一次添加时不会为您构建小部件。很难从提供的代码中看出来。

http://developer.android.com/guide/topics/appwidgets/index.html。 特别是这句话

  

onUpdate()方法不会   在创建App Widget时调用   (系统不会发送   ACTION_APPWIDGET_UPDATE广播时   配置活动已启动)。   这是责任   配置要求的活动   从AppWidgetManager更新时   App Widget首次创建。   但是,将调用onUpdate()   后续更新 - 只会跳过它   第一次。