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> 

这修复了所有我的问题。