1

ユーザーが構成可能なオブジェクトを備えたアプリがありますMyObject。これにより、ユーザーは特定のタイプのウィンドウを選択して、後日表示することができます。この時点で、選択肢はaDialogFragmentまたは。のいずれかになり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、私はもう拡張できませんMyDialogMyDialog拡張Fragmentしてから子クラスを拡張しようとしましたが、それは多重継承に実行され、発生することはありませんDialogFragmentFragmentActivity

DialogFragment両方のタイプを拡張する方法はありActivityFragmentますか?また、私のアプリの同じ基本クラスからですか?

代わりに、2つの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 と、ダイアログまたはアクティビティの 2 つのビューの選択肢があります。ビューとオブジェクト間のマッピングを結晶化する正しい場所はコントローラーですよね? 2 つのビューで View クラスを拡張できます。アプリでビュー クラスを拡張することはできません。Controller クラスを拡張する必要があります。

また、さまざまな UI アクティビティやイベントを分類していますか? ゲシュタルトでいくつかのイベントを行わない限り、そうすべきではないと思います。その場合、ComplexEvent スーパークラスと、トラップするイベントのリスト、または同じ目的を果たすサブクラスのいずれかを用意します。

于 2013-01-26T05:47:22.270 に答える