Как объединить классы виджетов? Имею в Андроид-приложении несколько виджетов разных размеров. Соответственно, под каждый приходится выделять отдельный класс. Можно ли как-то объединить эти классы в один? Может быть можно как-то вынести весь код в родительский класс, а в дочерних классах определить только необходимые константы? 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 аналогичны.
Да, можно объединить классы виджетов, используя наследование. Для этого вы можете создать родительский класс, в котором будет содержаться общая реализация функционала, а затем создать дочерние классы для каждого размера виджета, в которых будут определяться только необходимые константы.
Пример кода:
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 }
Таким образом, вы избавитесь от дублирования кода и сможете легко добавлять новые классы для других размеров виджетов, при необходимости.
Да, можно объединить классы виджетов, используя наследование. Для этого вы можете создать родительский класс, в котором будет содержаться общая реализация функционала, а затем создать дочерние классы для каждого размера виджета, в которых будут определяться только необходимые константы.
Пример кода:
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
}
Таким образом, вы избавитесь от дублирования кода и сможете легко добавлять новые классы для других размеров виджетов, при необходимости.