Как объединить классы виджетов? Имею в Андроид-приложении несколько виджетов разных размеров. Соответственно, под каждый приходится выделять отдельный класс. Можно ли как-то объединить эти классы в один? Может быть можно как-то вынести весь код в родительский класс, а в дочерних классах определить только необходимые константы?
WidgetHandler_4x4:public class WidgetHandler_4x4 extends AppWidgetProvider {
public static String ACTION_WIDGET_EDIT = "ActionWidgetEdit";
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
Intent editIntent = new Intent(context, this.getClass());
editIntent.setAction(ACTION_WIDGET_EDIT);
PendingIntent editPendingIntent = PendingIntent.getBroadcast(context, 0, editIntent, 0);
remoteViews.setOnClickPendingIntent(R.id.edit_button, editPendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ACTION_WIDGET_EDIT)) {
Toast.makeText(context, "edit", Toast.LENGTH_SHORT).show();
}
super.onReceive(context, intent);
}
}
Классы WidgetHandler_1x1 и WidgetHandler_4x1 аналогичны.

21 Авг 2019 в 07:10
205 +1
1
Ответы
1

Да, можно объединить классы виджетов, используя наследование. Для этого вы можете создать родительский класс, в котором будет содержаться общая реализация функционала, а затем создать дочерние классы для каждого размера виджета, в которых будут определяться только необходимые константы.

Пример кода:

public class WidgetHandler extends AppWidgetProvider {
public static String ACTION_WIDGET_EDIT = "ActionWidgetEdit";
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
Intent editIntent = new Intent(context, this.getClass());
editIntent.setAction(ACTION_WIDGET_EDIT);
PendingIntent editPendingIntent = PendingIntent.getBroadcast(context, 0, editIntent, 0);
remoteViews.setOnClickPendingIntent(R.id.edit_button, editPendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ACTION_WIDGET_EDIT)) {
Toast.makeText(context, "edit", Toast.LENGTH_SHORT).show();
}
super.onReceive(context, intent);
}
}

Дочерние классы:

public class WidgetHandler_1x1 extends WidgetHandler {
// Здесь можно определить конкретные константы для виджета 1x1
}
public class WidgetHandler_4x1 extends WidgetHandler {
// Здесь можно определить конкретные константы для виджета 4x1
}
public class WidgetHandler_4x4 extends WidgetHandler {
// Здесь можно определить конкретные константы для виджета 4x4
}

Таким образом, вы избавитесь от дублирования кода и сможете легко добавлять новые классы для других размеров виджетов, при необходимости.

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 852 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир