我有一个带有用户可配置对象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...
}
我被困的地方是我现在正在尝试使用ActivityFragment
添加相同的heirachy,我无法再延长MyDialog
。我尝试MyDialog
扩展Fragment
,然后子类扩展DialogFragment
或FragmentActivity
,但这会延伸到多重继承,这是不可能发生的。
有没有办法从我的应用中的同一基类扩展这两种类型DialogFragment
和ActivityFragment
?
我是否应该使用两个案例陈述来做更复杂的事情?我从来没有在抽象的方式中使用过这么多,所以我错误地使用了它吗?
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...
}
答案 0 :(得分:1)
看,我不是OO人。我更喜欢功能,但想在这里测试自己。所以让我们遵循mvc的想法。你有一个模型,myobject,以及两种观点,对话或活动的选择。控制视图和对象之间映射的正确位置是控制器,对吧?您的两个视图可以扩展View类。您的应用不应该扩展视图类。它应该扩展一个Controller类。
您是否也在上课 - 不同的UI活动或事件?我不认为你应该这样做,除非你在格式塔中采取一些事件。在这种情况下,有一个ComplexEvent超类和要捕获的事件列表,或者用于相同目的的子类。