【发布时间】:2012-03-30 22:32:40
【问题描述】:
我有一个非常简单的 appwidget(两个文本视图和一个按钮)。我已经在触摸板、Droid 1 和 Droid Razr 上对其进行了测试。它适用于除 Razr 之外的所有设备。当我将小部件添加到主屏幕时,它不会显示;它只是看不见的。如果我在它所在的位置按住它会选择一个小部件,如果我四处移动它,我会看到其他小部件移开,但它完全不可见。
我在onReceive 和onEnabled 方法中放了一些Toast,Toast 显示所有正确信息(即意图操作和附加信息)。
有人有这方面的经验吗?
编辑:请记住,这只是为了调试,不遵循最佳实践
public class GoogleTalkWidget extends AppWidgetProvider {
Button sendMessage;
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Received Intent Action = " +
intent.getAction(), Toast.LENGTH_SHORT).show();
if(intent.getAction().equals(Utils.RECEIVED_MESSAGE_WIDGET)){
RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.main_widget);
views.setTextViewText(R.id.widget_message,
(CharSequence)intent.getStringExtra("MESSAGE"));
views.setTextViewText(R.id.widget_sender,
(CharSequence)intent.getStringExtra("SENDER"));
Toast.makeText(context, "Received " +
intent.getStringExtra("MESSAGE") + " FROM " +
intent.getStringExtra("SENDER"), Toast.LENGTH_SHORT).show();
ComponentName cn = new ComponentName(context,
GoogleTalkWidget.class);
AppWidgetManager.getInstance(context).updateAppWidget(cn, views);
}
super.onReceive(context, intent);
}
@Override
public void onEnabled(final Context context){
super.onEnabled(context);
Toast.makeText(context, "Enabled", Toast.LENGTH_SHORT).show();
}
}
【问题讨论】:
-
onReceive()?你的意思是onUpdate()还是你的AppWidgetProvider? -
您还可以在 appwidget 中覆盖
onReceive()方法...我认为他们将其保留是因为早期版本的 Android 与onDelete存在一些问题 -
我明白这一点。但是,
onUpdate()通常是您提供RemoteViews以声明应用小部件中应该包含的内容的位置。是否正在调用onUpdate()并且您是否成功提供了RemoteViews? LogCat 中是否有任何可能相关的内容(例如堆栈跟踪)? -
检查上面添加的代码......我不想使用更新......我将它用作广播接收器,并让我的服务在我需要更新时发送广播。 ...更多的是推送通知而不是投票:-)。在任何情况下,我都看不到堆栈跟踪或错误......事实上,除了在 Razr 上不显示小部件这一事实之外,代码运行得很好
-
“我不想使用更新”——您别无选择,至少对于您的初始更新而言。
标签: android android-widget android-appwidget