I tried to get Search box to work on Action Bar Sherlock.
This is my PreLocationActivity
:
@ContentView(R.layout.search) public class PreLocationActivity extends RoboSherlockActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.map_layout); } @Override public boolean onCreateOptionsMenu(Menu menu) { //Used to put dark icons on light action bar menu.add("Search") .setIcon(R.drawable.ic_search_inverse) .setActionView(R.layout.collapsible_edittext) .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); return true; } @Override public boolean onSearchRequested() { return super.onSearchRequested(); } }
This is my SearchableActivity
:
@ContentView(R.layout.search) public class SearchableActivity extends RoboSherlockFragmentActivity { @InjectView(R.id.addressListView) ListView addressView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Get the intent, verify the action and get the query Intent intent = getIntent(); if (Intent.ACTION_SEARCH.equals(intent.getAction())) { String query = intent.getStringExtra(SearchManager.QUERY); doGeoSearch(query); } } public void doGeoSearch(String query){ Geocoder geocoder; ArrayList<Address> addresses; ArrayList<String> address = new ArrayList<String>() ; geocoder = new Geocoder(this, Locale.getDefault()); try { addresses = (ArrayList<Address>) geocoder.getFromLocationName(query, 6); Log.d("Address",String.valueOf(addresses)); for(int i = 0;i<addresses.size();i++) { String addr = new String(); addr.concat(addresses.get(i).getAddressLine(0)); addr.concat(addresses.get(i).getAddressLine(1)); addr = addresses.get(i).getAddressLine(0) + addresses.get(i).getLocality() + addresses.get(i).getAdminArea(); //addr.concat(addresses.get(i).getAddressLine(2)); Log.d("addr",addr); address.add(addr); } SearchAddressAdapater addressList = new SearchAddressAdapater(getApplicationContext(),R.layout.search_list,addresses, SearchableActivity.this); addressView.setAdapter(addressList); //ListView addressListView = new ListView(); } catch (IOException e) { //Handle exception } }
No success at all. As in, when I type something on the Prelocation Activity and press enter, nothing is being searched. Do I have to treat it as an EditText
and write a text listener for that which then calls the geoCoder
and gets me the locations or is there a smarter way to go about it?
To add a SearchView widget to the app bar, create a file named res/menu/options_menu. xml in your project and add the following code to the file. This code defines how to create the search item, such as the icon to use and the title of the item.
Support Library v7: http://developer.android.com/tools/support-library/features.html#v7-appcompat
Google now supports the ActionBar compatibility back to Android 2.1(API 7).
It is easy to make the transition because the method names are the same and/or very similar.
Add the Support Library with Resources: http://developer.android.com/tools/support-library/setup.html#libs-with-res
Your Manifest: AndroidManifest.xml
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="17" />
Your Menu: menu.xml
<item android:id="@+id/menu_search" android:actionViewClass="android.support.v7.widget.SearchView" android:icon="@drawable/ic_action_search" android:showAsAction="ifRoom|collapseActionView" android:title="Search"/>
Here is how to use the standard SearchView and SearchManager in Android with ActionBarSherlock! I am using this code and works fine. I have tested this on Android 2.3(API 10) - Android 4.3(API 18).
Great Tutorial and Documentation:
http://developer.samsung.com/android/technical-docs/UI-unification-with-older-Android-versions-using-ActionBarSherlock
Keep in mind:
Custom Search with ActionBarSherlock(min. API 7)
SearchView with ActionBarSherlock(min. API 8)
Your Menu: menu.xml
<item android:id="@+id/menu_search" android:actionViewClass="com.actionbarsherlock.widget.SearchView" android:icon="@drawable/ic_action_search" android:showAsAction="ifRoom|collapseActionView" android:title="Search"/>
Your Activity: MainActivity.java
public boolean onCreateOptionsMenu(Menu menu) { getSupportMenuInflater().inflate(R.menu.menu, menu); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); if (null != searchView ) { searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setIconifiedByDefault(false); } SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() { public boolean onQueryTextChange(String newText) { // this is your adapter that will be filtered adapter.getFilter().filter(newText); return true; } public boolean onQueryTextSubmit(String query) { // this is your adapter that will be filtered adapter.getFilter().filter(query); return true; } }; searchView.setOnQueryTextListener(queryTextListener); return super.onCreateOptionsMenu(menu); }
Let me know if this works for you as well and let me know if you need anymore help!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With