无法禁用android.widget.Button

7

我有一个Android小部件内的按钮,声明如下:

<Button android:id="@+id/newWorkBtnWidget"
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:text="@string/ts_on_repair"/> 

每次我尝试通过RemoteViews启用或禁用此按钮时,都会出现以下错误:android.widget.RemoteViews$ActionException: view: android.widget.Button can't use method with RemoteViews: setEnabled(boolean) 我的代码:
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
                        R.layout.widget);

remoteViews.setInt(R.id.newWorkBtnWidget, "setBackgroundResource",
    R.drawable.green_button);
remoteViews.setBoolean(R.id.newWorkBtnWidget, 
   "setEnabled", false);

如何修复它?

哎,是 newWorkBtnWidget 还是 newWorkButtWidget - gosr
抱歉,这应该是相同的按钮,已修复。无论如何这与问题无关。 - bvk256
2个回答

2
我最近遇到了同样的问题,发现使用remoteView.setBoolean()方法并设置'methodname'为 'setEnabled'也无法解决问题。
建议使用:
remoteViews.setBoolean(R.id.textView_life_id, "setEnabled", true);

您将会遇到以下这种错误:
W/AppWidgetHostView: updateAppWidget couldn't find any view, using error view
                                              android.widget.RemoteViews$ActionException: view: android.widget.TextView can't use method with RemoteViews: setEnabled(boolean)
                                                  at android.widget.RemoteViews$ReflectionAction.apply(RemoteViews.java:1134)
                                                  at android.widget.RemoteViews.performApply(RemoteViews.java:2304)
                                                  at android.widget.RemoteViews.apply(RemoteViews.java:2263)
                                                  at android.appwidget.AppWidgetHostView.updateAppWidget(AppWidgetHostView.java:402)
                                                  at com.android.launcher2.LauncherAppWidgetHostView.updateAppWidget(LauncherAppWidgetHostView.java:54)
                                                  at android.appwidget.AppWidgetHost.updateAppWidgetView(AppWidgetHost.java:434)
                                                  at android.appwidget.AppWidgetHost$UpdateHandler.handleMessage(AppWidgetHost.java:102)
                                                  at android.os.Handler.dispatchMessage(Handler.java:99)
                                                  at android.os.Looper.loop(Looper.java:138)
                                                  at android.app.ActivityThread.main(ActivityThread.java:5089)
                                                  at java.lang.reflect.Method.invokeNative(Native Method)
                                                  at java.lang.reflect.Method.invoke(Method.java:511)
                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
                                                  at dalvik.system.NativeStart.main(Native Method)

最终我发现唯一可以在RemoteView中使用的SDK方法是带有@android.view.RemotableViewMethod注解的方法。

例如:

@android.view.RemotableViewMethod
public final void setText(CharSequence text) {
     setText(text, mBufferType);
}

那么你可以使用 views.setCharSequence(R.id.textView, "setText", "测试");

0

您不能以传统方式使用enabled/disabled,但可以更新按钮以具有禁用的外观,或者拥有一个伪造的按钮,并用GONE/VISIBLE切换它们。


我感到惊讶,因为网上有一些来源提到了我所提到的禁用方式,例如https://dev59.com/yk3Sa4cB1Zd3GeqPtTQP#15413357。 - bvk256

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