【问题标题】:Android Click on Widget not working after adding widget添加小部件后Android单击小部件不起作用
【发布时间】:2011-07-07 05:46:22
【问题描述】:

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

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

有什么想法吗?

【问题讨论】:

    标签: android widget add clickable


    【解决方案1】:

    太棒了。 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);
            }           
    

    现在它就像一个魅力;)

    【讨论】:

    • 这会起作用,您的另一个选择是在代码中的任何位置更新小部件视图,而不是发送广播。我这样做的方法是将构建小部件视图的代码移动到一个实用程序类中,当我需要更新小部件时,我会从我的 AppWidgetProvider 子类和代码中的其他任何地方调用它。
    【解决方案2】:

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

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

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

    【讨论】:

    • 太棒了。问题在于未发送 ACTION_APPWIDGET_UPDATE。所以在关闭首选项之前,我发送 Intent updateIntent = new Intent(this, CallBackWidget.class); updateIntent.setAction("PreferencesUpdated"); updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); sendBroadcast(updateIntent);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    相关资源
    最近更新 更多