Hello Friend,
Today I am going to share some of my experience related to Action bar in Android. Have you seen many apps like whats-app and some others top app there are a action-bar search functionality. So let us see how can we do it-
1)If you want to get search result on same activity-
i-In your manifest,xml just add search action and searchable meta data-
<activity
android:name="com.androidhub4you.searchactionbardemo.SearchActivity"
android:launchMode="singleTop" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
ii- Create a searchable file inside res/xml-
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:hint="search..."
android:label="@string/app_name" />
Today I am going to share some of my experience related to Action bar in Android. Have you seen many apps like whats-app and some others top app there are a action-bar search functionality. So let us see how can we do it-
1)If you want to get search result on same activity-
i-In your manifest,xml just add search action and searchable meta data-
<activity
android:name="com.androidhub4you.searchactionbardemo.SearchActivity"
android:launchMode="singleTop" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
ii- Create a searchable file inside res/xml-
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:hint="search..."
android:label="@string/app_name" />
iii- In your menu.xml file add below code-
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Search Widget -->
<item
android:id="@+id/action_search"
android:actionViewClass="android.widget.SearchView"
android:icon="@drawable/ic_launcher"
android:showAsAction="always"
android:title="Search"/>
</menu>
iv- And finally inside your activity class-
public class SearchActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_results);
// get the action bar
ActionBar actionBar = getActionBar();
// Enabling Back navigation on Action Bar icon
actionBar.setDisplayHomeAsUpEnabled(true);
//txtQuery = (TextView) findViewById(R.id.txtQuery);
handleIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);
handleIntent(intent);
}
*//**
* Handling intent data
*/
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
txtQuery.setText("Search Query: " + query);
}
}
2)If you want searching into listview-
package
com.androidhub4you.searchactionbardemo;
import
android.app.Activity;
import
android.app.SearchManager;
import
android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import
android.view.MenuInflater;
import android.view.View;
import
android.widget.AdapterView;
import
android.widget.AdapterView.OnItemClickListener;
import
android.widget.ArrayAdapter;
import
android.widget.ListView;
import
android.widget.SearchView;
public class SearchActivity extends Activity {
ArrayAdapter<String>
myAdapter;
ListView listView;
String[] dataArray = new String[] {"India","Androidhub4you", "Pakistan", "Srilanka", "Nepal", "Japan"};
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_results);
//==========================
listView = (ListView)
findViewById(R.id.listview);
myAdapter = new
ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, dataArray);
listView.setAdapter(myAdapter);
listView.setTextFilterEnabled(true);
listView.setOnItemClickListener(new
OnItemClickListener() {
@Override
public void
onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
System.out.println(arg2+"
--postion");
}
});
}
@Override
public boolean
onCreateOptionsMenu(Menu menu) {
MenuInflater
inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
SearchManager searchManager = (SearchManager)
getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView)
menu.findItem(R.id.action_search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
SearchView.OnQueryTextListener
textChangeListener = new SearchView.OnQueryTextListener()
{
@Override
public boolean
onQueryTextChange(String newText)
{
// this is your adapter that will be
filtered
myAdapter.getFilter().filter(newText);
System.out.println("on text chnge
text: "+newText);
return true;
}
@Override
public boolean
onQueryTextSubmit(String query)
{
// this is your adapter that will be
filtered
myAdapter.getFilter().filter(query);
System.out.println("on query
submit: "+query);
return true;
}
};
searchView.setOnQueryTextListener(textChangeListener);
return super.onCreateOptionsMenu(menu);
}
}
Thank you!