I have entered Business Name, City and Area in each listview item. I have placed a edit text on top of the list view for the searching process. i want to search listview item by Busines name, city and area, i have used the text watcher on edit text and used the filter; but this is not working. What should I do???
This is my code:
CustomerShowPointActivity.java :-
ListView lv = (ListView) findViewById(R.id.list);
final ShowPointAdapter adapter = new ShowPointAdapter(
CustomerShowPointActivity.this, item);
lv.setAdapter(adapter);
lv.setTextFilterEnabled(true);
lv.bringToFront();
// Locate the EditText in listview_main.xml
editsearch = (EditText) findViewById(R.id.et1);
// Capture Text in EditText
editsearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
String text = editsearch.getText().toString()
.toLowerCase(Locale.getDefault());
adapter.filter(text);
}
});
And this is my Adapter class : -
public class ShowPointAdapter extends BaseAdapter {
// Declare Variables
Context mContext;
LayoutInflater mInflater;
private List<PointItem> item = null;
private ArrayList<PointItem> arraylist;
String search;
public ShowPointAdapter(Context context, List<PointItem> item) {
mContext = context;
this.item = item;
mInflater = LayoutInflater.from(mContext);
this.arraylist = new ArrayList<PointItem>();
this.arraylist.addAll(item);
}
public class ViewHolder {
TextView Bus_name;
TextView bus_area;
TextView bus_point;
}
@Override
public int getCount() {
return item.size();
}
@Override
public PointItem getItem(int position) {
return item.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public boolean isEnabled(int position) {
return false;
}
@Override
public View getView(final int position, View view, ViewGroup parent) {
final ViewHolder holder;
if (view == null) {
holder = new ViewHolder();
view = mInflater.inflate(R.layout.customer_show_point_item, null);
holder.Bus_name = (TextView) view
.findViewById(R.id.item_bname);
holder.bus_area = (TextView) view
.findViewById(R.id.item_barea);
holder.bus_point = (TextView) view
.findViewById(R.id.bus_point);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
// set the result into textviews
holder.Bus_name.setText(item.get(position).getbus_name());
holder.bus_area.setText(item.get(position).getbus_area() + ", "
+ item.get(position).getbus_city());
holder.bus_point.setText(item.get(position).getcus_bus_point());
return view;
}
public void filter(String charText) {
// TODO Auto-generated method stub
charText = charText.toLowerCase(Locale.getDefault());
item.clear();
if (charText.length() == 0) {
item.addAll(arraylist);
} else {
for (PointItem it : arraylist) {
if (it.getbus_name().toLowerCase(Locale.getDefault())
.contains(charText)) {
item.add(it);
}
}
}
notifyDataSetChanged();
}
}
I am not using Holder in my code... simply change the showPointAdapter class code...use
final ViewHolder holder;
just change the adapter class code :-
public class ShowPointAdapter extends BaseAdapter {
Context mContext;
LayoutInflater mInflater;
private List<PointItem> item = null;
private ArrayList<PointItem> arraylist;
String search;
public ShowPointAdapter(Context context, List<PointItem> item) {
mContext = context;
this.item = item;
mInflater = LayoutInflater.from(mContext);
this.arraylist = new ArrayList<PointItem>();
this.arraylist.addAll(item);
}
public class ViewHolder {
TextView Bus_name;
TextView bus_area;
TextView bus_point;
}
@Override
public int getCount() {
return item.size();
}
@Override
public PointItem getItem(int position) {
return item.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public boolean isEnabled(int position) {
return false;
}
@Override
public View getView(final int position, View view, ViewGroup parent) {
final ViewHolder holder;
if (view == null) {
holder = new ViewHolder();
view = mInflater.inflate(R.layout.customer_show_point_item, null);
holder.Bus_name = (TextView) view
.findViewById(R.id.item_bname);
holder.bus_area = (TextView) view
.findViewById(R.id.item_barea);
holder.bus_point = (TextView) view
.findViewById(R.id.bus_point);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
// set the result into textviews
holder.Bus_name.setText(item.get(position).getbus_name());
holder.bus_area.setText(item.get(position).getbus_area() + ", "
+ item.get(position).getbus_city());
holder.bus_point.setText(item.get(position).getcus_bus_point());
return view;
}
public void filter(String charText) {
// TODO Auto-generated method stub
charText = charText.toLowerCase(Locale.getDefault());
item.clear();
if (charText.length() == 0) {
item.addAll(arraylist);
} else {
for (PointItem it : arraylist) {
if (it.getbus_name().toLowerCase(Locale.getDefault())
.contains(charText)) {
item.add(it);
}
}
}
notifyDataSetChanged();
}
}