Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
添加小部件后Android点击小部件不工作_Android_Widget_Add_Clickable - Fatal编程技术网

添加小部件后Android点击小部件不工作

添加小部件后Android点击小部件不工作,android,widget,add,clickable,Android,Widget,Add,Clickable,prefs.java Intent resultValue = new Intent(); resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult(RESULT_OK, resultValue); Context context = getApplicationContext();

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

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


有什么想法吗?

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

看。 特别是这句话

onUpdate()方法将不可用 创建应用程序小部件时调用 (系统不会发送 操作\u应用程序\u更新广播时 启动配置活动)。 这是政府的责任 配置活动以请求 在以下情况下从AppWidgetManager更新: 首先创建应用程序小部件。 但是,将调用onUpdate() 后续更新只会跳过它 第一次


太好了。问题在于未发送操作\u应用程序\u更新。因此,在关闭首选项之前,我发送广播:

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);
        }           

现在它就像一个符咒;)

太好了。问题在于未发送操作\u APPWIDGET\u更新。所以在关闭首选项之前,我发送Intent updateIntent=newintent(这是CallBackWidget.class);更新内容设置动作(“首选项支持”);updateIntent.putExtra(AppWidgetManager.EXTRA\u APPWIDGET\u ID,appWidgetId);发送广播(更新内容);这将起作用,您的另一个选择是更新代码中任何地方的小部件视图,而不是发送广播。我这样做的方式是将代码移动到一个实用程序类中来构建小部件视图,当我需要更新小部件时,我从AppWidgetProvider子类和代码中的任何其他地方调用它。