Android is not searchable

Hi, I'm trying to use the search operation in my application, but when the search button is pressed, nothing happens.

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.test" android:versionCode="1" android:versionName="1.0.0" android:configChanges="keyboardHidden|orientation"> <uses-sdk android:minSdkVersion="7"/> <application android:icon="@drawable/icon" android:label="Test"> <activity android:name=".Test" android:label="Test" android:debuggable="true" android:theme="@android:style/Theme.NoTitleBar" android:launchMode="singleTask"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:name=".Searchable"> <intent-filter> <action android:name="android.intent.action.SEARCH" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/> </activity> <meta-data android:name="android.app.default_searchable" android:value=".Searchable"/> </application> </manifest> 

Searchable.xml (res / xml / searchable.xml)

 <?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="Search" android:hint="Perform Search"> </searchable> 

Searchable.java (src / com / test / test / Searchable.java)

 package com.test.test; import android.app.Activity; import android.app.SearchManager; import android.content.Intent; import android.os.Bundle; public class Searchable extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); handleIntent(getIntent()); } @Override protected void onNewIntent(Intent intent) { setIntent(intent); handleIntent(intent); } private void handleIntent(Intent intent) { if (Intent.ACTION_SEARCH.equals(intent.getAction())) { String query = intent.getStringExtra(SearchManager.QUERY); } } } 

TIA

ng93

+1
android search searchable
source share
1 answer

Your Searchable activity must do something - and actually show results.

I just wrote one of them, as suggested by the answer to the question I asked yesterday Attempting to filter the ListView using runQueryOnBackgroundThread, but nothing happens - what am I missing?

Take a look at this documentation on how to integrate with the built-in search support: Using the Android Search Dialog and look at this article on how to offer offers as client types: Adding custom offers

Your Searchable class should do a little more after getting the query string. For example, in my activity, after receiving a query string, I do this:

  showResults(query); 

and this method is as follows:

 private void showResults(String query) { // Load the list of countries based on the query Cursor countryCursor = myDbHelper.getCountryList (query); startManagingCursor (countryCursor); // Hook up the query results to the list view String[] from = new String[] { WorldInfoDatabaseAdapter.KEY_COUNTRYCODE, WorldInfoDatabaseAdapter.KEY_COUNTRYNAME }; int[] to = new int[] { R.id.countryflag, R.id.countryname }; SimpleCursorAdapter adapter = new SimpleCursorAdapter (this, R.layout.country_list_row, countryCursor, from, to); adapter.setViewBinder (new FlagViewBinder ()); myCountryList.setAdapter (adapter); myCountryList.setOnItemClickListener (new OnItemClickListener () { @Override public void onItemClick (AdapterView<?> parent, View view, int position, long id) { String countryName = myDbHelper.getCountryByID (id); if (countryName == null) { new AlertDialog.Builder (SelectCountryActivity.this).setMessage ( "Internal error: Cannot find the country with id'" + id + "'.").show (); return; } // Package up the country name to return Intent newCountryIntent = new Intent (myCountryList.getContext (), WorldInfoActivity.class); newCountryIntent.putExtra (WorldInfoActivity.KEY_SELECTED_COUNTRY, countryName); startActivity (newCountryIntent); startActivity (newCountryIntent); finish (); } }); } 

The myDbHelper element queries my database for countries that have passed the query string and displays them in a list. My activity has a layout that looks like this:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" style="?pageBackground"> <TextView android:id="@+id/selectdlgtitle" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/select_country_title" style="?dlgTitle" /> <ListView android:id="@+id/countrylist" android:layout_width="fill_parent" android:layout_height="fill_parent" android:cacheColorHint="#00000000" android:padding="2px"/> </LinearLayout> 

Perhaps you can do without calling setViewBinder - I need this because I translated the country code field into a flag icon.

+3
source share

All Articles