У меня есть приложение с настраиваемым пользователем объектом, MyObject
, что позволяет пользователю выбирать окно определенного типа для отображения позднее. На этом этапе выбор будет равен либо DialogFragment
, либо FragmentActivity
.Аннотация/Дизайн интерфейса для пользовательского окна
Идея заключается в том, что более поздняя дата, когда вызывается MyObject
, приложение отобразит Диалог/Фрагмент на основе опции, выбранной в настроенном MyObject
. По сути, функциональность обоих типов окон будет одинаковой, просто разные презентации.
Я начал с создания абстрактной установки класса, чтобы сделать что-то вдоль этих линий
public abstract MyDialog extends DialogFragment {
private static mDialog;
public abstract void close();
public abstract void open();
public abstract void start();
public abstract void stop();
public MyDialog (MyObject myO) {
switch (myO.getDialogType()) {
case 1: // MyDialog1
mDialog = new MyDialog1(myO);
break;
case 2: // MyDialog2
mDialog = new MyDialog2(myO);
break;
}
mDialog.open();
}
}
public MyDialog1 extends MyDialog {
@override
pubilic void onCreateDialog() {
}
// other implemented methods...
}
public MyDialog2 extends MyDialog {
@override
pubilic void onCreateDialog() {
}
// other implemented methods...
}
Где я застрял, что я сейчас пытаюсь добавить в той же heirachy с ActivityFragment
, я больше не могу простираются MyDialog
. Я пытался иметь MyDialog
удлинить Fragment
, а затем дочерние классы продлятся либо DialogFragment
, либо FragmentActivity
, но это работает с множественным наследством, которого не может быть.
Есть ли способ расширить оба типа, DialogFragment
и ActivityFragment
от того же базового класса в моем приложении?
Должен ли я вместо этого делать что-то более сложное, используя два аргумента case? Я никогда не использовал это в способе абстракции, поэтому я неправильно его использую?
public MyApp extends FragmentActivity {
MyObject mMyO;
public void someEvent() {
if (mMyO.getDisplayType() == "Activity") {
MyActivity myA;
switch (mMyO.getType()) {
case 1: // MyActivity1
myA = new MyActivity1(mMyO);
break;
case 2: // MyActivity2
myA = new MyActivity2(mMyO);
break;
}
myA.open();
}
if (mMyO.getDisplayType() == "Dialog") {
MyDialog myD;
switch (mMyO.getType()) {
case 1: // MyDialog1
myD = new MyDialog1(mMyO);
break;
case 2: // MyDialog2
myD = new MyDialog2(mMyO);
break;
}
myD.open();
}
}
}
public MyDialog1 extends MyDialog {
@override
pubilic void onCreateDialog() {
}
// other implemented methods...
}
public MyDialog2 extends MyDialog {
@override
pubilic void onCreateDialog() {
}
// other implemented methods...
}
public MyActivity1 extends MyActivity {
@override
pubilic void onCreate() {
}
// other implemented methods...
}
public MyActivity2 extends MyActivity {
@override
pubilic void onCreate() {
}
// other implemented methods...
}