【问题标题】:AppWidget click lost after system restarts my process系统重新启动我的进程后,AppWidget 点击丢失
【发布时间】:2011-04-14 04:24:30
【问题描述】:

我正在制作一个 appwidget,但我遇到了点击事件的问题,当系统终止小部件的进程并稍后重新启动它时,该事件会丢失。屏幕旋转后也会发生这种情况。

针对 SDK 版本 7 构建并在模拟器 (2.1) 和具有 2.3.3 的真实设备上运行。

我的 onUpdate 方法:

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    for (int wid : appWidgetIds) {
        Log.i(TAG, "onUpdate widget #" + wid);

        Intent intent = new Intent(context, MyClass.class);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, wid);

        PendingIntent clickIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        RemoteViews widget = new RemoteViews(context.getPackageName(), R.layout.widget);
        widget.setOnClickPendingIntent(R.id.widget_layout, clickIntent);

        appWidgetManager.updateAppWidget(wid, widget);
    }

    super.onUpdate(context, appWidgetManager, appWidgetIds);
}

其中 R.id.widget_layout 是 appwidget 线性布局的 id。我尝试将此点击事件也添加到文本视图,但结果相同。

我与这个问题斗争了好几天,我发现一些人有同样的问题,但没有解决方案适合我:(我也尝试了不同的待处理意图标志,但没有任何成功。

第二个问题是,当我在主屏幕上添加另一个 appwidget 时,它不会对点击事件做出反应。在 logcat 中,我看到来自 onUpdate 方法“onUpdate widget #xy”的消息,但 appwidget 对点击没有反应。只有放置在主屏幕上的第一个 appwidget 会对点击做出反应,但只会持续一段时间。有什么想法吗?

【问题讨论】:

    标签: android click widget android-appwidget


    【解决方案1】:

    当你说第一个小部件停止响应点击时,你的意思是 onUpdate 方法没有被调用?也许在onEnabled(Context context) 中添加一些代码,看看是否会调用它,如果是,则在该函数中添加任何必要的逻辑。此外,您可以通过 onReceive 方法(在同一链接中找到)捕获意图,以查看您的小部件实际接收的意图。

    此外,请确保您运行接收器的Context(传递给此函数的接收器)是应用程序或服务,而不是活动,否则对它的引用可能不会持续存在。

    您还必须确保每次使用RemoteViews 对象更新小部件时,您都会发送完全重建小部件所需的所有数据。这是因为在屏幕旋转等情况下,除了您传递的最新RemoteViews 之外,系统没有任何东西可以重建小部件。

    【讨论】:

    • 单击停止工作 = 单击小部件后未显示 MyClass 活动。我只从服务更新我的小部件。所以只有当我在主屏幕上放置一个小部件时才会调用 onUpdate。 onEnabled 被调用,当它应该,当第一个 appwidget 被放置。我如何确保上下文不是活动?当我使用 RemoteViews 重绘小部件时,我是否还应该附加点击事件?
    • 你的最后一段就是答案。我的问题是,我从服务中重绘了我的小部件,但我不知道,我还应该重新附加点击事件。现在,在我重绘小部件后,我重新附加点击事件,一切正常。我的小部件在重新启动其进程和屏幕旋转后仍然存在。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 2014-07-01
    • 1970-01-01
    相关资源
    最近更新 更多