I am a begginer in Android.I tried to make a custom listview filtering and it worked somehow. i have array adapter in my class. i use the method when text filter changed. i running my application and there's no error. but the result doesn't same with the keyword.
my code in onCreateView if the text keyword changed
inputSearch=(EditText) rootView.findViewById(R.id.inputSearch);
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
// When user changed the Text
// adapter = new ListFPPAdapter();
//listProyekfpp.setAdapter(adapter);
FPPFragment.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 this is my method array adapter
class ListFPPAdapter extends ArrayAdapter<ClsProyek> {
ArrayList<ClsProyek> listOrginalProyek = null;
ArrayList<ClsProyek> FilterListProyek = null;
Filter filter;
ListFPPAdapter() {
super(getActivity(), R.layout.list_proyek_item, Proyek);
this.listOrginalProyek = new ArrayList<ClsProyek>(Proyek);
this.FilterListProyek = new ArrayList<ClsProyek>(Proyek);
}
@Override
public View getView(int pos, View row, ViewGroup viewGroup) {
ListProyekItemHolder holder = null;
if(row == null) {
LayoutInflater inflater = getActivity().getLayoutInflater();
row = inflater.inflate(R.layout.list_proyek_item, viewGroup, false);
holder = new ListProyekItemHolder(row);
row.setBackgroundColor(android.R.drawable.list_selector_background);
row.setTag(holder);
} else {
holder = (ListProyekItemHolder)row.getTag();
}
holder.populateFrom(Proyek.get(pos));
return row;
}
@Override
public Filter getFilter() {
if (filter == null) {
filter = new ResultFilter();
}
return filter;
}
@Override
public int getCount() {
return FilterListProyek.size();
}
@Override
public ClsProyek getItem(int position) {
return FilterListProyek.get(position);
}
private class ResultFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
String filterText = constraint.toString().toLowerCase();
if (filterText == null || filterText.length() == 0) {
synchronized (this) {
results.values = listOrginalProyek;
results.count = listOrginalProyek.size();
}
} else {
ArrayList<ClsProyek> filterList = new ArrayList<ClsProyek>();
ArrayList<ClsProyek> originalList = new ArrayList<ClsProyek>();
synchronized (this) {
originalList.addAll(listOrginalProyek);
}
for (int i = 0, l = originalList.size(); i < l; i++) {
ClsProyek m = originalList.get(i);
final String Param=m.getNamaClient().toLowerCase();
if (Param.contains(filterText)) {
filterList.add(m);
}
}
results.values = filterList;
results.count = filterList.size();
}
return results;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
FilterListProyek = (ArrayList<ClsProyek>) results.values;
if(results.count > 0)
{
notifyDataSetChanged();
}else{
notifyDataSetInvalidated();
}
}
}
}
Help Me Please.