1

我有一个带有用户可配置对象的应用程序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,然后子类扩展DialogFragmentor 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...
}
4

1 回答 1

1

看我不是OO的家伙。我更喜欢功能性但想在这里测试自己。所以让我们遵循mvc的想法。您有一个模型、myobject,以及两个视图(对话或活动)的选择。将视图和对象之间的映射具体化的正确位置是控制器,对吗?您的两个视图可以扩展一个 View 类。您的应用不应扩展视图类。它应该扩展一个 Controller 类。

您是否也在对不同的 UI 活动或事件进行分类?我认为你不应该这样做,除非你会在格式塔中参加几个活动。在这种情况下,有一个 ComplexEvent 超类和一个要捕获的事件列表,或者具有相同目的的子类。

于 2013-01-26T05:47:22.270 回答