Вопрос

I am following this relatively simple tutorial on how to manually start a SearchableActivity so that I can get a result back from it.

He is basically setting up the base Activity (Activity A) as the searchable activity (in the manifest), so that it receives the search intent and then manually launch real Search Activity (Activity B) with startActivityForResult,

After altering the manifests, he only has one block of code. My question:

Where do you put this code?

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 or B? And where do you call it?

EXTRA INFO - How I am doing it currently - does this get cut out?

@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);

}
Это было полезно?

Решение

First make Activity(A) singleInstance/singleTop in manifest.xml android:launchMode="singleInstance|singleTop"
then use the onNewIntent(Intent intent) from Activity(A) to handleIntent(intent)

Edit:
ActivityA.java

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

Please read this tutorial to get full clear view of what happening

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top