2012-01-31 8 views
2

私の継承問題の解決策があると思いますが、それを見つけることができません。Javaで多重継承をバイパスします

ほとんどのページでSlidingDrawer(私のメニュー用)を再利用するAndroidアプリケーション(ターゲットはAndroid 2.1)を開発しています。すべてのアクティビティでそれを初期化するのを避けるために、私はDefaultActivityを作成しました。 TabActivityを拡張しなければならないまで、Javaは多重継承をサポートしていないため、うまくいきました。

私は

public class SomeActivity extends DefaultActivity{ 
    // Declarations 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.myLayout); 
     super.initializeMenu(); 
    } 
} 

次の操作を行い活性を有している。しかし、私はそう、私は

を行うことはできません TabActivityを拡張するビューを持っているとき、基本的に、私は今、次のデフォルトの活動

public class DefaultActivity extends Activity{ 
    // Declarations 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Some code 
    } 

    @Override 
    protected void onPause() { 
     // Some code 
    } 

    protected void initializeMenu() { 
     // Init 
    } 
} 

を持っています

public class SomeOtherActivity extends TabActivity, DefaultActivity 

どのようにして1つのクラスを拡張することができますか? ActivityTabActivityのコードはどれですか?

ありがとうございました。

+0

あなたはどのOSをターゲットにしていますか?これはOS 3+のフラグメントを使用して解決されました – L7ColWinters

+0

私はAndroid 2.1をターゲットにしています。 –

答えて

3

を使用するために、そのオブジェクトのフィールドを追加します。

DefaultActivtyのすべてを実行するActivityHelperクラスを作成します。次に、すべてのアクティビティにActivityHelper型のメンバー変数があります。

public class ActivityHelper { 
    // Declarations 

    @Override 
    public boolean onCreateOptionsMenu(Activity activity, Menu menu) { 
    // Some code 
    } 

    @Override 
    protected void onPause(activity) { 
    // Some code 
    } 

    protected void initializeMenu(activity) { 
    // Init 


    } 
} 

public class MyActivity extends Activity { 
    private final ActivityHelper helper; 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
    helper.onCreateOptionsMenu(this, menu) 
    } 

    @Override 
    protected void onPause() { 
    helper.onPause(this); 
    } 

    protected void initializeMenu() { 
    helper.initializeMenu(this) 
    } 
} 

これはもう少しコードですが、はるかに柔軟です。これは、DefaultActivityがActivityの保護されたメソッドに依存していない場合にのみ機能します。

+0

ありがとうございました、私はそのようなことをすることについて考えましたが、私はそれを行う適切な方法を見つけることができませんでした! –

1

TabActivityを拡張する代わりにデータメンバとして置き、オーバーライドしたくないメソッドを委譲し、他のメソッドは自分自身を実装します。 それは問題を解決しません、厳しい、メソッドがDefaultActivityとTabActivityの両方に存在することです(私は束があると思います...)。 これはJavaが多重継承を許可しない理由です:

希望します。

2

タブのアクティビティ

このクラスは推奨されていません。 新しいアプリケーションでは、このクラスの代わりにFragmentsを使用する必要があります。古いデバイスで引き続き実行するには、v4サポートライブラリを使用します。このライブラリは、DONUTと互換性のあるバージョンのFragment APIを提供します。

+0

ええ、私は、タブの活動は廃止されましたが、私はタブなしでそれを使用することを知っています。私はそれがボタンで機能していることをシミュレートします。私はちょうどすべてのアクティビティをリロードするのではなく、この特定のケースでコンテンツをリロードすることができるようにしたい。私の問題は、アプリケーション自体の設計ではなく、複数の継承についてです。 –

+0

フラグを使用してください... – L7ColWinters

0

通常、一般的なプログラミングでは、私たちは、私はDefaultActivityするための組成物の代わりに、継承を使用することになり、多重継承に