【问题标题】:setTextViewText not working in IntentServicesetTextViewText 在 IntentService 中不起作用
【发布时间】:2013-04-14 10:33:34
【问题描述】:

onHandleIntent 中的代码:

RemoteViews views = new RemoteViews(getPackageName(), R.layout.mylayout);
views.setTextViewText(R.id.txtView1, "some string");
...
Bundle bundle = intent.getExtras();
int id = bundle.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
AppWidgetManager manager = AppWidgetManager.getInstance(this);
manager.updateAppWidget(id, views);

不更新名为 txtView1 的小部件的 TextView。我找了又找,但似乎我所做的一切似乎都与我找到的相符。

【问题讨论】:

  • 服务在后台运行 您不能直接从服务更新 ui。使用处理程序
  • 是的,同意。这也是 Toast 不起作用的原因。但是,RemoteViews 可能在另一个进程中。 @Harshid 的答案几乎可以工作,但它会更新所有实例。

标签: android android-appwidget intentservice remoteview


【解决方案1】:

您需要 Handler 从工作线程更新 UI。

您可以从本教程中获得帮助 http://crodrigues.com/updating-the-ui-from-a-background-thread-on-android/

或者,如果您不想涉及线程和处理程序的内容,也可以使用 Asynctask

Asynctask 自己管理这些东西,你可以在 onPostExecute() 方法中更新 UI 等等..

您可以在谷歌的开发者android网站中阅读有关asynctask的详细信息。

【讨论】:

【解决方案2】:

您必须在应用小部件开发中更新您的 textview。

  RemoteViews views = new RemoteViews(getPackageName(), R.layout.mylayout);
    views.setTextViewText(R.id.txtView1, "some string");
    thisWidget = new ComponentName(context, WatchWidget.class);  
    appWidgetManager.updateAppWidget(thisWidget, remoteViews);

【讨论】:

  • 谢谢@Harshid,这让我比以前走得更远,但是,它会同时更新所有实例。
【解决方案3】:

唉,谢谢大家的回答,不幸的是这是我的错误。在我的自定义 AppWidgetProvider 的 onUpdate 中,我传递了错误的 ID。我现在已将其切换为正确的 Id,并且每个小部件实例都会正确更新。

【讨论】:

    猜你喜欢
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多