1

我跟随此relatively simple tutorial了解如何手动启动SearchableActivity,以便我可以从中获得result从活动中获取结果开始使用SearchManager

他基本上是建立Activity(活动A)作为所述可搜索的活性(在清单中),因此其接收到的搜索意图,然后手动启动实际搜索Activity(活动B)与startActivityForResult

更改清单后,他只有一个代码块。我的问题:

你把这段代码放在哪里?

private void handleIntent(Intent intent) { 
    // Get the intent, verify the action and get the query 
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
    String query = intent.getStringExtra(SearchManager.QUERY); 
    // manually launch the real search activity 
    final Intent searchIntent = new Intent(getApplicationContext(), 
      MySearchActivity.class); 
    // add query to the Intent Extras 
    searchIntent.putExtra(SearchManager.QUERY, query); 
    startActivityForResult(searchIntent, ACTIVITY_REQUEST_CODE); 
    } 

Activity A或B?你在哪里打电话?

EXTRA INFO - 我现在是怎么做的 - 它会被切掉吗?

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getSupportMenuInflater(); 
    inflater.inflate(R.menu.menu, menu); 
    MenuItem searchItem = menu.findItem(R.id.menu_search); 
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { 
    SearchView searchView = (SearchView) searchItem.getActionView(); 
    searchView.setSearchableInfo(searchManager 
      .getSearchableInfo(getComponentName())); 
    searchView.setIconifiedByDefault(true); 

} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
    setupNewSearchView(searchItem, searchManager); 
} 

return true; 

}

@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
private void setupNewSearchView(final MenuItem searchItem, SearchManager searchManager) { 
    android.widget.SearchView searchView = (android.widget.SearchView) searchItem.getActionView(); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
    searchView.setIconifiedByDefault(true); 

} 

回答

2

首先使活性(A)singleInstance/singleTop中的manifest.xml android:launchMode="singleInstance|singleTop"
然后使用onNewIntent(Intent intent)从活动(A)至handleIntent(意图)

编辑:
ActivityA.java

@Override 
protected void onNewIntent(Intent intent) { 
    handleIntent(intent); 
} 

请仔细阅读此tutorial以全面了解发生的事情

+0

我不确定我关注。 'onNewIntent()'被调用的地方在哪里?我假设在'活动'A.但是在哪里?当“活动”A开始时(onCreate)?或者'SearchManager'通常被调用? – KickingLettuce

+1

当您搜索时(在searchView中编写文本并在键盘上按下搜索按钮之后),Android系统将启动一个新的Activity(A)实例(带有搜索操作的Intent的新Activity(A)),但因为我们使用'singleInstance'活动(A)上的onNewIntent函数将与搜索行为意图一起调用 – JafarKhQ

+0

感谢您的所有帮助。我明白你在说什么。但对于“哪里”仍然不清楚。你说过“它将被调用搜索行为意图”。现在,我在'onCreateOptionsMenu'中处理这个(我相信)。我已经将上面的代码添加到了我如何在所需更改之前执行此操作。有什么地方我需要打电话吗? (并删除我已经做了什么呢?) – KickingLettuce

相关问题