Как обрабатывать кнопки виджетов - PullRequest
2 голосов
/ 02 октября 2011

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

Дело в том, что я просто хочу изменить изображение с моего изображения. Когда я нажимаю на него, я кое-что перепробовал, но ничего не работает. Я не понял, как работает RemoteView и Intent. Так что, если кто-то может объяснить это в ближайшее время, я был бы признателен за это =)

Вот код:

public class HelloWidget extends AppWidgetProvider {
    private ImageButton wifi;
    public static String ACTION_WIDGET_CONFIGURE = "ConfigureWidget";
    public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget";

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
        Intent configIntent = new Intent(context, ClickOneActivity.class);
        configIntent.setAction(ACTION_WIDGET_CONFIGURE);
        Intent active = new Intent(context, HelloWidget.class);
        active.setAction(ACTION_WIDGET_RECEIVER);
        PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0);
        PendingIntent configPendingIntent = PendingIntent.getActivity(context,  0, configIntent, 0);
        remoteViews.setOnClickPendingIntent(R.id.button_wifi, actionPendingIntent);
        remoteViews.setOnClickPendingIntent(R.id.button_two, configPendingIntent);
        appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        // v1.5 fix that doesn't call onDelete Action
        final String action = intent.getAction();
        if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) {
            final int appWidgetId = intent.getExtras().getInt(
               AppWidgetManager.EXTRA_APPWIDGET_ID, 
               AppWidgetManager.INVALID_APPWIDGET_ID);

            if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
                this.onDeleted(context, new int[] { appWidgetId });
            }

        } else {
            // check, if our Action was called
            if (intent.getAction().equals(ACTION_WIDGET_RECEIVER)) {
                Toast.makeText(context, "Teste", Toast.LENGTH_LONG).show();
                RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
                remoteViews.setInt(R.id.button_wifi, "toogleOnOff", R.drawable.icon);

            }
            super.onReceive(context, intent);
        }

    }
}

Я получил много учебного кода, как вы можете видеть = p

Спасибо, что теперь

1 Ответ

1 голос
/ 02 декабря 2011

Похоже, вам нужно немного больше понять о RemoteViews. Когда вы вызываете такие функции, как setOnClickPendingIntent, setInt и т. Д. Для объекта RemoteViews, он просто сохраняет эти операции и аргументы внутри себя. Затем, когда виджет отображается, он просто воспроизводит эти операции, чтобы создать представления виджета. Поэтому после передачи RemoteViews в AppWidgetManager с помощью вызова updateAppWidget вы не сможете изменить их снова, если не перестроите все RemoteViews и снова не вызовете updateAppWidget.

В качестве ответа на ваш вопрос вы хотите использовать список состояний в качестве фона для кнопки. Вот хороший пример здесь .

...