I want to search the custom listview (Used arrayadaptor) items based on the user input.I have already implements filterable class in my custom listview, But for optimizing the cache memory i have used holder to carry the current row. Now its become much complicated to get the item based on the user input.
Can anyone help me to sort out the issue ?
My main class is,
public class ambulanceActivity extends Activity{
dbhelper db4;
ListView lstview_Items;
int images = R.drawable.call;
final ArrayList<String> mArrayList = new ArrayList<String>();
final ArrayList<String> mArrayList1 = new ArrayList<String>();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ambulance_list);
EditText inputSearch=(EditText) findViewById(R.id.inputSearch);
lstview_Items=(ListView) findViewById(R.id.listView1);
db4 = new dbhelper(getApplicationContext());
db4.creteDB();
Cursor checkerA = db4.getDetails();
checkerA.moveToFirst();
while (!checkerA.isAfterLast()) {
mArrayList.add(checkerA.getString(checkerA
.getColumnIndex("ambname")));
mArrayList1.add(checkerA.getString(checkerA
.getColumnIndex("ambnum")));
checkerA.moveToNext();
}
checkerA.close();
final CustomAdapter adapter=new CustomAdapter(this,mArrayList,images,mArrayList1);
lstview_Items.setAdapter(adapter);
lstview_Items.setTextFilterEnabled(true);
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2,
int arg3) {
adapter.getFilter().filter(cs);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
}
@Override
public void afterTextChanged(Editable arg0) {
}
});
}
}
And my custom listview is,I have just implement the filterable class here
class CustomAdapter extends ArrayAdapter <String> implements Filterable{
Context con;
int images;
ArrayList<String> names;
ArrayList<String> number;
public CustomAdapter(Con c, ArrayList<String> mArrayList,int imgs, ArrayList<String> num) {
super(c, R.layout.list_entry,R.id.contact,mArrayList);
this.con=c;
this.images=imgs;
this.names=mArrayList;
this.number=num;
}
class MyViewHolder extends Activity
{
ImageView myImage;
TextView myContactName;
TextView myContactNumber;
MyViewHolder(View v)
{
myImage=(ImageView) v.findViewById(R.id.police);
myContactName=(TextView) v.findViewById(R.id.name);
myContactNumber=(TextView) v.findViewById(R.id.contact);
}
}
public View getView(final int position, View convertView, ViewGroup parent) {
View row = convertView;
MyViewHolder holder=null;
if (row == null){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.list_entry, parent, false);
holder=new MyViewHolder(row);
row.setTag(holder);
}
else
{
holder=(MyViewHolder) row.getTag();
}
ImageView call=(ImageView) row.findViewById(R.id.police);
call.setTag(position);
call.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent("android.intent.action.CALL");
Uri data = Uri.parse("tel:"+number.get(position).toString());
intent.setData(data);
context.startActivity(intent);
}
});
TextView contact=(TextView) row.findViewById(R.id.contact);
holder.myImage.setImageResource(images);
holder.myContactName.setText(names.get(position));
holder.myContactNumber.setText(number.get(position));
return row;
}
}