9 6
9 6

Reputation: 21

How To Add Search Functionality in ListView

how do i add Search Functionality in my android app? i have a listview in which i want to add search functionality , i have the code but i dont know how do i integrate it properly with my app here is the code -

inputSearch.addTextChangedListener(new TextWatcher() {

@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
    // When user changed the Text
    MainActivity.this.adapter.getFilter().filter(cs);   
}

@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
        int arg3) {
    // TODO Auto-generated method stub

}

 @Override
public void afterTextChanged(Editable arg0) {
    // TODO Auto-generated method stub                          
}
});

and here is my java file

package com.Example.app;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

private ListView list1;

private String array[] = { "Iphone", "Tutorials", "Gallery", "Android",

"item 1", "item 2", "item3", "item 4", "item 1", "item 2", "item3", "item 4","item 1",        "item 2", "item3", "item 4"};


   @Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

list1 = (ListView) findViewById(R.id.ListView01);

// By using setAdpater method in listview we an add string array in

// list.

list1.setAdapter(new ArrayAdapter(this,

android.R.layout.simple_list_item_1, array));

list1.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
     if (position == 1)
    {
      Intent myIntent = new Intent(getApplicationContext(),Baba.class);
      startActivity(myIntent);
    }
  }
});
}

}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:stackFromBottom="true">
<EditText 
android:id="@+id/inputSearch"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:hint="Search"
android:inputType="textVisiblePassword">
</EditText>
<ListView
    android:id="@+id/ListView01"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:scrollbarSize="5dp" 

    >

</ListView>

</LinearLayout>

Upvotes: 0

Views: 4362

Answers (2)

Raghunandan
Raghunandan

Reputation: 133560

Try the below

EditText inputSearch; 
ArrayAdapter<String> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
inputSearch = (EditText) findViewById(R.id.inputSearch); // initialize edittext 
list1 = (ListView) findViewById(R.id.ListView01);
adapter =new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, array));
list1.setAdapter(adapter);
inputSearch.addTextChangedListener(new TextWatcher() {

@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
    // When user changed the Text
    MainActivity.this.adapter.getFilter().filter(cs);   
}

@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
        int arg3) {
    // TODO Auto-generated method stub

}

 @Override
public void afterTextChanged(Editable arg0) {
    // TODO Auto-generated method stub                          
}
});
list1.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
     if (position == 1)
    {
      Intent myIntent = new Intent(getApplicationContext(),Baba.class);
      startActivity(myIntent);
    }
  }
});
}

Initialize editText inputSearch in onCreate.

inputSearch = (EditText) findViewById(R.id.inputSearch); // initialize edittext 

Initialize adapter

adapter =new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, array));

Set the adapter op listview

list1.setAdapter(adapter);

This is where the search happens

 @Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
    // When user changed the Text
    MainActivity.this.adapter.getFilter().filter(cs);   // filter based on input
}

Upvotes: 1

mamba4ever
mamba4ever

Reputation: 2672

Since you are using android's array adapter, you can use its getFilter() method too. So you just have to change minor things in your code.

Instead of setting array adapter like this

list1.setAdapter(new ArrayAdapter(this,android.R.layout.simple_list_item_1, array));

Create a private variable outside of the methods

private ArrayAdapter adapter;

Then initialize and set it

adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1, array);
list1.setAdapter(adapter);

Now text changed method can call MainActivity.this.adapter.getFilter().filter(cs); without any problem

Upvotes: 0

Related Questions