如何在Android小部件上实现一个按钮

24

我刚开始学习Android开发,已经创建了一个在主屏幕上显示一些信息的小部件。然而,我现在想在这个小部件上添加一个按钮,用来更新小部件中的文本视图。

有人可以指导我如何实现吗?

谢谢。


3
我已经阅读了开发者文档,这是我成功创建小部件的原因!但有人能否建议在小部件上如何实现一个按钮 - 我没有Activity来设置setOnClickListener。因此,我想知道如何在小部件中实现按钮。 - bigtony
http://developer.android.com/reference/android/widget/Button.html - YuppieNetworking
4
是的,我看过那篇文章,但它只展示了如何在一个Activity中使用按钮,而我的小部件里没有Activity。也许需要一个Activity,但我不确定如何将Activity与小部件连接起来,这是我的问题所在 - 我该如何在Android小部件中实现一个按钮。 - bigtony
2个回答

24

已解决 - 我可以确认,如果您想要创建一个按钮来更新 Android AppWidget,则不需要 Activity。

我已成功实现了我的 AppWidgetProvider 类,使其在 AndroidManifest.xml 中使用 android.appwidget.action.APPWIDGET_UPDATE intent-filter 向广播接收器注册,然后触发 AppWidgetProvider 类中的 onUpdate 事件(随后再运行 UpdateService)。

<!-- Broadcast Receiver that will process AppWidget updates -->
<receiver android:name=".MyWidget" android:label="@string/widget_name">
   <intent-filter>
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
   </intent-filter>
   <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget" />
</receiver>

我的AppWidgetProvider类中的UpdateService然后使用onHandleIntent方法运行一个私有的buildUpdate方法 - 该方法使用调用setOnClickPendingIntent来注册onClick事件,如下所示:

// set intent and register onclick
Intent i = new Intent(this, MyWidget.class);
PendingIntent pi = PendingIntent.getBroadcast(context,0, i,0);
updateViews.setOnClickPendingIntent(R.id.update_button,pi);

这里有一个链接,指向一个工作示例的源代码,展示了如何使用更新按钮来更新 Twitter 组件:

https://github.com/commonsguy/cw-advandroid/tree/b01438e7f0fed8f795ddec4be43066905f03d0cc/AppWidget/TwitterWidget


4

按钮在 appwidget 中是支持的,所以不确定问题出在哪里。 看一下这个例子,如何通过 views.setOnClickPendingIntent(R.id.YOURVIEW ID, yourIntent); 分配操作。

RemoteViews 对象(以及相应的 App Widget)可以支持以下布局类:

FrameLayout LinearLayout RelativeLayout

以及以下小部件类:

AnalogClock Button Chronometer ImageButton ImageView ProgressBar TextView 这些类的后代不受支持。


嗨-谢谢,我确实知道如何在我的AppWidget onUpdate()方法中使用views.setOnClickPendingIntent,但我不确定如何实现Activity(我需要吗?我假设需要-但是它是像普通按钮一样实现的吗?)以及如何设置我的清单文件以向Activity注册意图(动作是什么?)。 - bigtony
这取决于你想做什么。如果你想显示某种对话框,那么是的,你需要为此创建一个活动。然后在你的按钮(我假设它是小部件的一部分)中,在views.setOnClickPendingIntent中创建一个意图来启动该活动。 - Alex Volovoy
谢谢 - 是的,按钮是小部件的一部分。实际上,我不想创建一个对话框,这就是为什么我犹豫使用Activity的原因。所以,如果我只想通过服务更新小部件,那么我不需要Activity,这样想是对的吗? - bigtony
是的,创建带有良好刷新指示的图像按钮()或带有文本“刷新”的按钮。然后将其处理到您的服务中。 - Alex Volovoy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接