2015-06-28 49 views
0

我已經閱讀了Android官方網站,但仍然感到困惑。我可以問可搜索的活動和可搜索的界面兩種不同的活動嗎?我的理解是你新增了一個可搜索界面活動的意圖,然後將查詢傳遞給可搜索的活動。可搜索活動完成搜索並通過另一個意圖將適配器(通常情況下)返回給可搜索界面活動?搜索欄Android澄清

它是正確的嗎?

從網站上有這個片段:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the options menu from XML 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.options_menu, menu); 

    // Get the SearchView and set the searchable configuration 
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); 
    // Assumes current activity is the searchable activity 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
    searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default 

    return true; 
} 

是不是應該對搜索的界面活性?但爲什麼有兩條線以上的評論:

// Assumes current activity is the searchable activity 
     searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
     searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default 

// Assumes current activity is the searchable activity

請解釋。非常感謝。

回答

0

「假設當前活動是可搜索的活動」行指的是getComponentName()表達式(返回當前活動的組件名稱,當從其中調用時)。

我可以問可搜索的活動和可搜索的界面兩種不同的活動嗎?

你可以做任何一種方式。

搜索通常發生在已經顯示的內容中,因此可以方便地在包含SearchView的相同Activity中對結果過濾進行編碼。同一活動的新實例將被創建並啓動,每次用戶搜索時,都可以通過按BACK返回前一個實例。不用說,所涉及的活動必須具有合適的launchMode(例如默認的「標準」)才能起作用。

如果您通過組件名稱另一個活動來getSearchableInfo這樣的:

ComponentName searchResultActivity = new ComponentName(getPackageName(), ViewerActivity.class.getName()); 
searchView.setSearchableInfo(searchManager.getSearchableInfo(searchResultActivity)); 

然後ViewerActivity內的<meta-data>標籤將被使用,並且活動將獲得搜索意圖來代替。