Android-виджет onclick прослушиватель для нескольких кнопок ⇐ Android
-
Anonymous
Android-виджет onclick прослушиватель для нескольких кнопок
Я пытаюсь создать виджет для своего приложения. Судя по моему чтению сайта разработчиков Android, все ваши слушатели onclick должны иметь намерение. Но что, если я просто хочу, чтобы моя кнопка обновляла данные в самом виджете, и я не хочу начинать новое действие?
Вот демо-код Android:
Намерение намерение = новое намерение (контекст, ПримерАктивность.класс); PendingIntent pendingIntent = PendingIntent.getActivity(контекст, 0, намерение, 0); // Получаем макет виджета приложения и прикрепляем прослушиватель по клику //к кнопке Представления RemoteViews = новые RemoteViews(context.getPackageName(), R.layout.appwidget_provider_layout); views.setOnClickPendingIntent(R.id.button, pendingIntent); Мне нужна кнопка, которая при нажатии на нее выполняет http-веб-вызов, а затем отображает результаты в виджете. Как мне это сделать, если мне нужно использовать намерения? Также мне нужно иметь возможность различать, какие кнопки были нажаты.
Почему виджеты используют намерения, а не обычный прослушиватель onclick, который вызывает такую функцию, как действия?
ИЗМЕНИТЬ
Мой поставщик виджетов:
публичный класс MyWidgetProvider расширяет AppWidgetProvider { частная статическая окончательная строка MyOnClick1 = "myOnClickTag1"; частная статическая окончательная строка MyOnClick2 = "myOnClickTag2"; частная статическая окончательная строка MyOnClick3 = "myOnClickTag3"; @Override public void onUpdate (контекст контекста, AppWidgetManager appWidgetManager, int [] appWidgetIds) { // Получить все идентификаторы ComponentName thisWidget = новое ComponentName(context, MyWidgetProvider.class); int [] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget); for (int widgetId: allWidgetIds) { RemoteViews RemoteViews = новые RemoteViews(context.getPackageName(), R.layout.widget_layout); RemoteViews.setOnClickPendingIntent(R.id.widget_button_stayarm, getPendingSelfIntent(context, MyOnClick1)); RemoteViews.setOnClickPendingIntent(R.id.widget_button_awayarm, getPendingSelfIntent(context, MyOnClick2)); RemoteViews.setOnClickPendingIntent(R.id.widget_button_dissarm, getPendingSelfIntent(context, MyOnClick3)); RemoteViews.setTextViewText(R.id.widget_textview_gpscoords, «кабели GPS»); appWidgetManager.updateAppWidget(widgetId, RemoteViews); } } protected PendingIntent getPendingSelfIntent (контекст контекста, строковое действие) { Намерение намерение = новое намерение (контекст, getClass()); намерение.setAction(действие); return PendingIntent.getBroadcast(контекст, 0, намерение, 0); } @Override public void onReceive (контекст контекста, намерение намерения) { если (MyOnClick1.equals(intent.getAction())) { // здесь ваше действие onClick Toast.makeText(context, «Button1», Toast.LENGTH_SHORT).show(); Log.w("Виджет", "Нажата кнопка1"); } else if (MyOnClick2.equals(intent.getAction())) { Toast.makeText(context, "Button2", Toast.LENGTH_SHORT).show(); Log.w("Виджет", "Нажата кнопка2"); } else if (MyOnClick3.equals(intent.getAction())) { Toast.makeText(context, "Button3", Toast.LENGTH_SHORT).show(); Log.w("Виджет", "Нажата кнопка3"); } }; } Мой манифест Android:
Я пытаюсь создать виджет для своего приложения. Судя по моему чтению сайта разработчиков Android, все ваши слушатели onclick должны иметь намерение. Но что, если я просто хочу, чтобы моя кнопка обновляла данные в самом виджете, и я не хочу начинать новое действие?
Вот демо-код Android:
Намерение намерение = новое намерение (контекст, ПримерАктивность.класс); PendingIntent pendingIntent = PendingIntent.getActivity(контекст, 0, намерение, 0); // Получаем макет виджета приложения и прикрепляем прослушиватель по клику //к кнопке Представления RemoteViews = новые RemoteViews(context.getPackageName(), R.layout.appwidget_provider_layout); views.setOnClickPendingIntent(R.id.button, pendingIntent); Мне нужна кнопка, которая при нажатии на нее выполняет http-веб-вызов, а затем отображает результаты в виджете. Как мне это сделать, если мне нужно использовать намерения? Также мне нужно иметь возможность различать, какие кнопки были нажаты.
Почему виджеты используют намерения, а не обычный прослушиватель onclick, который вызывает такую функцию, как действия?
ИЗМЕНИТЬ
Мой поставщик виджетов:
публичный класс MyWidgetProvider расширяет AppWidgetProvider { частная статическая окончательная строка MyOnClick1 = "myOnClickTag1"; частная статическая окончательная строка MyOnClick2 = "myOnClickTag2"; частная статическая окончательная строка MyOnClick3 = "myOnClickTag3"; @Override public void onUpdate (контекст контекста, AppWidgetManager appWidgetManager, int [] appWidgetIds) { // Получить все идентификаторы ComponentName thisWidget = новое ComponentName(context, MyWidgetProvider.class); int [] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget); for (int widgetId: allWidgetIds) { RemoteViews RemoteViews = новые RemoteViews(context.getPackageName(), R.layout.widget_layout); RemoteViews.setOnClickPendingIntent(R.id.widget_button_stayarm, getPendingSelfIntent(context, MyOnClick1)); RemoteViews.setOnClickPendingIntent(R.id.widget_button_awayarm, getPendingSelfIntent(context, MyOnClick2)); RemoteViews.setOnClickPendingIntent(R.id.widget_button_dissarm, getPendingSelfIntent(context, MyOnClick3)); RemoteViews.setTextViewText(R.id.widget_textview_gpscoords, «кабели GPS»); appWidgetManager.updateAppWidget(widgetId, RemoteViews); } } protected PendingIntent getPendingSelfIntent (контекст контекста, строковое действие) { Намерение намерение = новое намерение (контекст, getClass()); намерение.setAction(действие); return PendingIntent.getBroadcast(контекст, 0, намерение, 0); } @Override public void onReceive (контекст контекста, намерение намерения) { если (MyOnClick1.equals(intent.getAction())) { // здесь ваше действие onClick Toast.makeText(context, «Button1», Toast.LENGTH_SHORT).show(); Log.w("Виджет", "Нажата кнопка1"); } else if (MyOnClick2.equals(intent.getAction())) { Toast.makeText(context, "Button2", Toast.LENGTH_SHORT).show(); Log.w("Виджет", "Нажата кнопка2"); } else if (MyOnClick3.equals(intent.getAction())) { Toast.makeText(context, "Button3", Toast.LENGTH_SHORT).show(); Log.w("Виджет", "Нажата кнопка3"); } }; } Мой манифест Android:
Мобильная версия