用户可选窗口的抽象/界面设计

时间:2013-01-26 04:46:08

标签: java android

我有一个带有用户可配置对象MyObject的应用,它允许用户选择要在以后显示的特定类型的窗口。此时,选择将最终为DialogFragmentFragmentActivity

我们的想法是,在调用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,然后子类扩展DialogFragmentFragmentActivity,但这会延伸到多重继承,这是不可能发生的。

有没有办法从我的应用中的同一基类扩展这两种类型DialogFragmentActivityFragment

我是否应该使用两个案例陈述来做更复杂的事情?我从来没有在抽象的方式中使用过这么多,所以我错误地使用了它吗?

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...
}

1 个答案:

答案 0 :(得分:1)

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

您是否也在上课 - 不同的UI活动或事件?我不认为你应该这样做,除非你在格式塔中采取一些事件。在这种情况下,有一个ComplexEvent超类和要捕获的事件列表,或者用于相同目的的子类。