bartwell
@bartwell

Как объединить классы виджетов?

Имею в Андроид-приложении несколько виджетов разных размеров. Соответственно, под каждый приходится выделять отдельный класс. Можно ли как-то объединить эти классы в один? Может быть можно как-то вынести весь код в родительский класс, а в дочерних классах определить только необходимые константы?


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 аналогичны.
  • Вопрос задан
  • 3143 просмотра
Решения вопроса 1
Vacxe
@Vacxe
Если виджеты выполняют приблизительно одинаковую роль, но отличаются размером или стилем например, то имеет смысл создавать родительский абстрактный класс с интерфесами.
Также возможно, если ваши виджеты приблизительно одинаковые, то к их используемым компонентам присвоить одинаковые id и всю инициалицазию вынести в родительский класс в final void setupIU(){}. Далее наследоваться, ставить нужные contextView в каждом виджете.
Пример
public class ParentWidget extends AppWidgetProvider {
public final void setUI(){
 /* инициализация одинаковых компонентов и действий для наследуемых виджетов*/
}
}

public class ChildWidget0 extends BaseWidget {
onCreate(){
super.OnCreate();
setUI();
}

public class ChildWidget1 extends BaseWidget {
onCreate(){
super.OnCreate();
setUI();
}


А вообще красивее создать нэймспейс *.widgets и туда отдельными классами в .java сохранять
Наследование только сократит количество кода, и добавит качественную характеристику в отсутствии дублирования кода. Оптимизация.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
SabMakc
@SabMakc
А в чем проблема просто сделать классы-наследники?
Если надо, добавить метод getAction, возвращающий строку, вместо ACTION_WIDGET_EDIT (если эти события надо разделять). Аналогично и с разметкой.
Ответ написан
AChep
@AChep
Вынести немного кода — можно, объединить в один класс, насколько я знаю, увы, нельзя
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы