如何在Android AppWidget Button上以编程方式禁用onClick处理程序

grz*_*aks 5 layout android android-widget

我在appwidget上有一个Button,我需要从服务中以编程方式"启用"/"禁用".

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

另一个想法是从中删除文本标签rv.setTextViewText(R.id.buttonid, ""),然后删除点击处理程序rv.setOnClickPendingIntent(R.id.buttonid, null).不幸的是,传递null给它导致NullPointerExceptionandroid.app.ActivityThread.handleServiceArgs

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

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

Com*_*are 5

在创建RemoteViews实例时,您将提供布局.如果要禁用该按钮,请选择该按钮上的布局android:enabled="false".

或者,你可以使用setOnClickPendingIntent()和提供一个Intent不会去任何地方的东西(例如,一个Intent没人使用的动作的广播).


Hen*_*usa 5

基本上我有同样的问题,但想完全编程,所以我们只是将布尔值传递给setBoolean()函数:

remoteViews.setBoolean(R.id.imageButton1, "setEnabled", false);
Run Code Online (Sandbox Code Playgroud)

别忘了告诉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);
Run Code Online (Sandbox Code Playgroud)