У меня есть два списка ArrayList в программе, и я пытаюсь выполнить для них фильтрацию. Я использую CustomAdapter, который расширяет BaseAdpater, реализует Filterable. Я использовал несколько кодов для этого, но почему-то это не сработало. Коды следующие. Edittext используется для поиска / фильтрации. Есть ли проблема в методе publishResult? Или
public void search()
{
searchText = (EditText) findViewById(R.id.searchText);
if (custNameList.size() != 0)
{
searchText.addTextChangedListener(new TextWatcher()
{
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2)
{
mCustomAdapter.getFilter().filter(charSequence);
}
@Override
public void afterTextChanged(Editable editable)
{
}
});
}
else
{
Toast.makeText(this, "No Entry", Toast.LENGTH_SHORT).show();
}
}
private class mCustomAdapter extends BaseAdapter implements Filterable
{
CustomFilter customFilter;
ArrayList<String> filterList ;
@Override
public int getCount()
{
return custIdList.size();
}
@Override
public Object getItem(int position)
{
return custIdList.get(position);
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
convertView= layoutInflater.inflate(R.layout.item_subitem, null);
TextView listCustID = convertView.findViewById(R.id.sampleCustId);
TextView listCustName = convertView.findViewById(R.id.sampleCustName);
listCustID.setText(custIdList.get(position));
listCustName.setText(custNameList.get(position));
return convertView;
}
@Override
public Filter getFilter()
{
if(customFilter == null)
{
customFilter = new CustomFilter();
}
return customFilter;
}
class CustomFilter extends Filter
{
@Override
protected FilterResults performFiltering(CharSequence constraint)
{
filterList = new ArrayList<String>();
FilterResults filterResults = new FilterResults();
if(constraint != null && constraint.length() > 0)
{
constraint = constraint.toString().toUpperCase();
ArrayList<String> tempList = new ArrayList<String>();
for(int i=0 ; i<custIdList.size() ; i++)
{
if(custIdList.toString().contains(constraint) || custNameList.toString().toUpperCase().contains(constraint));
{
tempList.add(custIdList.get(i));
}
}
filterResults.count = tempList.size();
filterResults.values = tempList;
}
else
{
filterResults.count = custIdList.size();
filterResults.values = custIdList;
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults filterResults)
{
custIdList = (ArrayList<String>) filterResults.values;
notifyDataSetChanged();
}
}
}