如何处理小部件按钮
Posted
技术标签:
【中文标题】如何处理小部件按钮【英文标题】:How to handle widgets buttons 【发布时间】:2011-11-29 12:04:54 【问题描述】:我从小部件开始,并在互联网上获得了一个非常好的教程,让示例运行完美,但是当我尝试更改某些内容时,我卡住了。
问题是:当我按下它时,我只想从我的 imageButton 更改图像,我尝试了一些东西,但似乎没有任何效果。我不明白 RemoteView 和 Intent 是如何工作的。因此,如果有人能尽快解释一下,我将不胜感激 =)
代码如下:
public class HelloWidget extends AppWidgetProvider
private ImageButton wifi;
public static String ACTION_WIDGET_CONFIGURE = "ConfigureWidget";
public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget";
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
Intent configIntent = new Intent(context, ClickOneActivity.class);
configIntent.setAction(ACTION_WIDGET_CONFIGURE);
Intent active = new Intent(context, HelloWidget.class);
active.setAction(ACTION_WIDGET_RECEIVER);
PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0);
PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
remoteViews.setOnClickPendingIntent(R.id.button_wifi, actionPendingIntent);
remoteViews.setOnClickPendingIntent(R.id.button_two, configPendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
@Override
public void onReceive(Context context, Intent intent)
// v1.5 fix that doesn't call onDelete Action
final String action = intent.getAction();
if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action))
final int appWidgetId = intent.getExtras().getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID)
this.onDeleted(context, new int[] appWidgetId );
else
// check, if our Action was called
if (intent.getAction().equals(ACTION_WIDGET_RECEIVER))
Toast.makeText(context, "Teste", Toast.LENGTH_LONG).show();
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
remoteViews.setInt(R.id.button_wifi, "toogleOnOff", R.drawable.icon);
super.onReceive(context, intent);
我得到了很多教程代码,你可以看到 =p
谢谢,从现在开始
【问题讨论】:
您遇到了什么错误?请提供错误日志。 【参考方案1】:看来您需要对 RemoteViews 有更多了解。当您在 RemoteViews 对象上调用 setOnClickPendingIntent、setInt 等函数时,它基本上只是在内部存储这些操作和参数。然后,当显示小部件时,它只是回放这些操作以构建小部件的视图。所以在通过调用updateAppWidget将RemoteViews交给AppWidgetManager之后,你不能再次改变它们,除非你重建整个RemoteViews并再次调用updateAppWidget。
作为对您问题的回答,您希望使用状态列表作为按钮的背景。有一个很好的例子here。
【讨论】:
以上是关于如何处理小部件按钮的主要内容,如果未能解决你的问题,请参考以下文章
如何处理 Android 中远程视图的异常(自定义小部件或自定义通知)?