2012-07-21 10 views
5

私のアプリケーションでは、検索ボタンに別のActivityを実行させたいと思っています。つまり、アプリのどこからでも検索ボタンを押すと、別のアクティビティが呼び出されます。アプリ全体でグローバルな「検索機能」

すべてのアクティビティでonSearchRequested()を定義する代わりに、私はちょうど1か所(Manifest.xmlのような)に設定して、アプリ全体で使用できますか?

+0

答えを正しく使用していることを確認してください。そうでない場合は、私たちに詳細をお知らせください。 – Michal

答えて

6

アクティビティを拡張し、onSearchRequestを実装し、そのクラスの他のすべてのアクティビティクラスを継承する(必須ではない)抽象クラスを定義できます。このようにして、onSearchの動作を1回だけ定義するだけで済みます。

すなわち

public abstract class MyBaseActivity extends Activity { 
    @Override 
    public void onSearchRequest() { 
     // Your stuff here 
    } 
} 

public class MyActivity1 extends MyBaseActivity { 
    // OnSearchRequest is already implemented 
} 

あなたは、活動の複数のサブクラスを使用するように、すなわちListActivityを計画している場合は、あなたが使用するすべての活動のサブクラスのための抽象基本クラスを作成する必要がありますように、これは、良い解決策ではないかもしれません。この場合、私はあなたにも、すべての活動の抽象サブクラスを定義することで、両方のapprochesを組み合わせることができ、検索ボタン処理コードをカプセル化し、追加のクラスを作成することをお勧めして、あなたからの活動ということをonSearchRequest呼び出し、もちろんすなわち

public class SearchButtonHandle { 
    public void handleSearch(Context c) { 
     // Your search btn handling code goes here 
    } 
} 

public class MyActivity1 extends Activity { // Or ListActivity .... 
    @Override 
    public void onSearchRequest() { 
     new SearchButtonHandle().handleSearch(this); 
    } 
} 

たい上記の例のようにonSearchRequestを使用して外部の検索ハンドラを使用して実装するサブクラス

+0

それは実際には素晴らしいアイデアですが、もし彼がどこかでListViewの活動を使いたいのであれば? – Michal

+1

@Michalその場合、彼が複数のListActivitiesやその他のアクティビティのサブクラスを使用する場合、コンポジションは継承より優れた解決策になるかもしれません。たとえば、検索ボタンを処理するコードをカプセル化したSearch Handlingクラスを作成し、すべてのアクティビティから呼び出すことができます。私は例を使ってそれを指摘するために私の答えを編集します –