2012-07-21 82 views
5

在我的應用程序中,我希望搜索按鈕執行單獨的Activity。即當我按下搜索按鈕時,從應用程序中的任何位置開始,我想要一個單獨的活動被調用。整個應用程序的全局「搜索功能」

有沒有什麼辦法,而不是在每個活動中定義onSearchRequested(),我只是在一個地方配置它(如Manifest.xml),它可以在整個應用程序中使用?

+0

請確保您標記答案正確,如果您使用它。如果沒有,請提供更多信息。 – Michal 2012-07-23 07:23:45

回答

6

您可以定義一個擴展Activity的(不一定)抽象類,在那裏實現onSearchRequest並繼承該類中的所有其他Activity類。這樣你只需要定義onSearch行爲一次。

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

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

如果您計劃使用活動的多個子類,即ListActivity,這可能不是一個很好的解決方案,因爲你必須創建一個抽象基類爲您所使用的所有活動的子類。在這種情況下,我建議你創建一個額外的類,封裝搜索按鈕處理代碼和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); 
    } 
} 

當然你也可以通過定義所有活動的一個抽象類既包括approches您使用和實施onSearchRequest的子類與上面的示例中一樣使用外部搜索處理程序

+0

這實際上是一個好主意,但如果他想在某處使用ListView活動呢? – Michal 2012-07-21 13:28:45

+1

@Michal我想在這種情況下,如果他使用多個ListActivities或Activity的其他子類,組合可能是比繼承更好的解決方案。他可以創建一個搜索處理類,封裝處理搜索按鈕的代碼並從所有活動中調用它。我會編輯我的答案,以一個例子來指出 – 2012-07-21 13:43:25