2012-02-23 11 views
0

すべてのアクティビティに対して1つのハンドラを作成したいと思います。しかし、私は一つの問題を持っている:私はからのアクティビティや他からの延長、いくつかの活動をheveときAndroid onOptionsItemSelected(...)すべてのアクティビティのリスナー

class MyActivity extends Activity { 

    // ... 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // ... 
    } 
} 

しかし、私がしなければならない何をすべきか:私はこの作業のために、私はActivityクラスを継承し、このように、このハンドラをオーバーライドする必要があることを知っていますMapActivity?

+0

別のクラスを作成して、それをあなたのすべてのアクティビティで使用してみませんか? – DeeV

答えて

1

Javaの多重継承が不可能であり、MapActivityActivityは、あなたが制御するクラスを拡張することはできません。

それぞれの基本アクティビティにはonOptionsItemSelected(MenuItem item)メソッドが必要ですが、共有されている別のクラスを呼び出す場合は同じコードを共有できます。

class BaseActivity extends Activity { 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     MenuHelper.handleOnItemSelected(item); 
    } 
} 

class BaseMapActivity extends MapActivity { 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     MenuHelper.handleOnItemSelected(item); 
    } 
} 

class MenuHelper { 

    public static void handleOnItemSelected(MenuItem item) { 
      // do something.. 
    } 

} 
+0

はい、私はこれを知っていますが、私のハンドラで私の活動の一部の私的な変数を使用している場合。例えば、 someMethod(this)のようなContextを送信する場合(宣言の場合:public void someMethod(Context context))? –

+0

はい、必要な場合は、ハンドラメソッドにアクティビティを渡すことができます。それ以外の場合は、メソッドを直接メソッドに渡すだけです。 –

+1

そうしないでください。共有プリファレンスまたはサブクラスアプリケーションに変数を格納します。 – Sparky

0

あなたはMapActivityを拡張し、あなたのMyMapActivityクラスを作成し、これと他のMyActivityのためのあなたのonOptionsItemSelected実装では、同じ手順を呼び出すことができます。

MenuItem.setOnMenuItemClickListenerを持つすべてのメニュー項目に対してカスタムリスナーを設定し、このリスナーでイベントをプロシージャにディスパッチさせることができます。

関連する問題