1

我試圖在我的應用程序中實現SearchView小部件。SearchView小部件從未啓動可搜索結果活動

問題:當我按搜索時,我的Searchable活動從未啓動以顯示結果。由於某種原因,SearchView小部件未鏈接到結果活動。

下面是相關代碼:

AndroidManifest.xml中

<!--ACTIVITY WITH SEARCHVIEW WIDGET--> 
    <activity 
     android:name=".activity.LocationManagerActivity" 
     android:label="@string/title_activity_location_manager" > 

     <meta-data 
      android:name="android.app.default_searchable" 
      android:value=".activity.LocationManagerResultsActivity" /> 
    </activity> 

<!--ACTIVITY TO DISPLAY RESULTS--> 
    <activity 
     android:name=".activity.LocationManagerResultsActivity" 
     android:launchMode="singleTop" 
     android:label="@string/title_activity_location_manager_results" > 

     <intent-filter> 
      <action android:name="android.intent.action.search" /> 
     </intent-filter> 

     <meta-data 
      android:name="android.app.searchable" 
      android:resource="@xml/searchable" /> 
    </activity> 

LocationManagerActivity.class

public class LocationManagerActivity extends AppCompatActivity { 

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

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu_location_manager, menu); 

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.location_manager_menu_search)); 

    ComponentName componentName = new ComponentName(this, LocationManagerResultsActivity.class); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(componentName)); 

    return true; 
} 

} 

LocationManagerResultsActivity.class

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

    handleIntent(getIntent()); 
} 

@Override 
protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 

    handleIntent(intent); 
} 

private void handleIntent(Intent intent) { 
    Toast.makeText(this, "have intent", Toast.LENGTH_SHORT); 

    if(intent.getAction().equals(Intent.ACTION_SEARCH)) { 
     String query = intent.getStringExtra(SearchManager.QUERY); 
     doSearch(query); 
    } 
} 

LocationManagerResultsActivity永遠不會由LocationManagerActivity SearchView實際創建。

我所做的一切,我能找到的所有其他問題

  • 添加default_searchable到基底活動
  • 添加android.app.searchable@xml/searchable可搜索的活動
  • 變化getComponentName()獲得搜索活動的組成部分名稱

換句話說,我可以輸入東西進入搜索欄,bu當我按搜索時,沒有任何反應。

我在做什麼錯?

回答

0

問題是我沒有正確使用搜索意圖過濾器的名稱。

曾經被認爲是:

<intent-filter> 
     <action android:name="android.intent.action.search" /> 
</intent-filter> 

現在是:

<intent-filter> 
      <action android:name="android.intent.action.SEARCH" /> 
</intent-filter> 

這修復了所有我的問題。