2010-04-15 93 views
4

我在appwidget上有一个按钮,需要通过服务以编程方式“启用”/“禁用”。如何以编程方式禁用Android上的onClick处理程序AppWidget按钮

第一个想法是致电setBoolean(R.id.buttonid, "setClickable", false)来禁用它,但显然你不能远程调用setClickable

另一个想法是用rv.setTextViewText(R.id.buttonid, "")从中删除文本标签,然后删除点击处理程序rv.setOnClickPendingIntent(R.id.buttonid, null)。不幸的是,通过null它导致NullPointerException in android.app.ActivityThread.handleServiceArgs

是否有一些其他方式来以编程方式禁用/启用appwidget按钮?我可以拨打rv.setViewVisibility(R.id.buttonid, View.GONE)来完全隐藏按钮,而不是禁用它。然而,这将完全打破整个小部件布局,我想避免它。

我现在使用的解决方案是隐藏按钮setViewVisibility,并显示其他空白按钮,而不是像以前一样保留appwidget布局。

回答

5

当你创建你的RemoteViews实例时,你提供了一个布局。当您想禁用该按钮时,请在该按钮上选择android:enabled="false"的布局。

或者,您可以使用setOnClickPendingIntent()并提供一个不会去任何地方的Intent(例如,针对没有人使用的操作的广播Intent)。

4

基本上我有同样的问题,但要做到这一点完全编程,所以我们只是传递布尔值setBoolean()功能:

remoteViews.setBoolean(R.id.imageButton1, "setEnabled", false); 

不要忘记告诉Android的更新主屏幕:

RemoteViews remoteViews = new RemoteViews(context.getResources().getText(R.string.package_name).toString(), R.layout.your_layout); 
    ComponentName thisWidget = new ComponentName(context, Widget.class); 
    AppWidgetManager manager = AppWidgetManager.getInstance(context); 
    manager.updateAppWidget(thisWidget, remoteViews); 
相关问题