Question

I used the officical Android sample code "SearchableDictionary" (Link: http://jayxie.com/mirrors/android-sdk/resources/samples/SearchableDictionary/index.html), that gives us a search interface, where you can search for a word and you have 2 options:

1- Put your keyword and click on search icon (keyboard), so a listview for all matched results will appear. You click on a word in the ListView to retrieve the definition.

2- Put your keyword and a little list of suggestion will appear automatically every time the searchView keyword changes, so you can click on a suggestion to retrieve her definition.

This is the code of the search function called when you click on an item in the big listview, not in the list of suggestions.

     private void doSearch(String queryStr) { 
            // get a Cursor, prepare the ListAdapter and set it
     final DataBaseHelper myDbHelper = new DataBaseHelper(this);
     myDbHelper.openDataBase();
     Cursor cursor = managedQuery(DictionaryProvider.CONTENT_URI, null, null,
             new String[] {queryStr}, null);
    //Cursor cursor = myDbHelper.fetchListItems(queryStr);
    //cursorr.moveToFirst(); // moves the cursor to the first row in the result set, returns false if the result set is empty.

    startManagingCursor(cursor); /* Managing cursors take care of closing the cursor when
    the activity is destroyed, but they do more than that as well: they will be
    deactivated and required as the activities is stopped and restarted. */

    // set the custom list adapter
    // setListAdapter(new MyListAdapter(this, cursor));

     // Specify the columns we want to display in the result
     String[] from = new String[] { DataBaseHelper.KEY_WORD,
                                    DataBaseHelper.KEY_DEFINITION };

     // Specify the corresponding layout elements where we want the columns to go
     int[] to = new int[] { R.id.title,
                            R.id.details };

     // Create a simple cursor adapter for the definitions and apply them to the ListView
     SimpleCursorAdapter words = new SimpleCursorAdapter(this,
                                   R.layout.list_item_with_description, cursor, from, to);
     final ListView mListView = (ListView) findViewById(R.id.list);
     mListView.setAdapter(words);
    // search_keyword = queryStr ;

     // Define the on-click listener for the list items
     mListView.setOnItemClickListener(new OnItemClickListener() {
         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {


             // Build the Intent used to open WordActivity with a specific word Uri
             Intent wordIntent = new Intent(getApplicationContext(), DefinitionActivity.class);
            // final Bundle bundle = new Bundle();


             Uri data = Uri.withAppendedPath(DictionaryProvider.CONTENT_URI,
                                             String.valueOf(id));


             Log.d(TAG,"clicked row id="+id);

             wordIntent.setData(data);
             wordIntent.putExtra("clicked_item_id",id);

             startActivity(wordIntent);
         }
     });

As you can see we can handle the items clicked in the list of matched words, but how can i handle the suggestions clicked in the little list of suggestions? I want to catch the id of the clicked suggestion, not the clicked item in the big listview. How can I make this?

Was it helpful?

Solution

When a search suggestion is clicked, an Intent is sent to your searchable activity. You can simply define the Action field of this Intent though your searchable XML by configuring the android:searchSuggestIntentAction attribute like this:

<searchable 
...
    android:searchSuggestIntentAction = "android.intent.action.VIEW">

And then, in your searchable Activity:

Intent intent = getIntent();
if (Intent.ACTION_VIEW.equals(intent.getAction()) {
    //a suggestion was clicked... do something about it...
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top