我有一个带有用户可配置对象的应用程序MyObject
,它允许用户选择特定类型的窗口以在以后显示。在这一点上,选择最终将是 aDialogFragment
或 a 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
or 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...
}