Как программно отключить обработчик onClick на Android AppWidget Button - PullRequest
5 голосов
/ 15 апреля 2010

У меня есть кнопка на appwidget, которую мне нужно программно «включить» / «отключить» из службы.

Первой идеей было вызвать setBoolean(R.id.buttonid, "setClickable", false), чтобы отключить его, но, очевидно, вы не можете вызвать setClickable удаленно.

Другая идея заключалась в том, чтобы убрать с него текстовую метку с помощью rv.setTextViewText(R.id.buttonid, ""), а затем удалить обработчик щелчка на rv.setOnClickPendingIntent(R.id.buttonid, null). К сожалению, передача null к нему вызывает NullPointerException in in android.app.ActivityThread.handleServiceArgs

Есть ли другой способ программно отключить / включить кнопку appwidget? Я мог бы просто позвонить rv.setViewVisibility(R.id.buttonid, View.GONE), чтобы полностью скрыть кнопку вместо ее отключения. Это, однако, полностью разрушило бы весь макет виджета, и я хотел бы избежать этого.

Решением, которое я использую сейчас, является скрытие кнопки с setViewVisibility и отображение другой пустой кнопки вместо макета сохранения приложения, как это было раньше.

Ответы [ 2 ]

5 голосов
/ 14 марта 2013

По сути, у меня была та же проблема, но я хотел сделать это полностью программно, поэтому мы просто передаем логическое значение в функцию 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);
5 голосов
/ 15 апреля 2010

Когда вы создаете свой экземпляр RemoteViews, вы предоставляете макет. Если вы хотите отключить кнопку, выберите макет с android:enabled="false" для этой кнопки.

Или вы можете использовать setOnClickPendingIntent() и предоставить Intent, который просто никуда не денется (например, трансляция Intent для действия, которое никто не использует).

...