I have two ArrayLists on the programme and I am trying to perform filtering on them. I am using Custom Simple Adapter. I used some codes to perform so but somehow it not working. Codes are as follows. Edittext is used for searching/Filtering.
First Data is fetched from the SQLiteDatabasse
public void getDetails()
{
Cursor result = demoSQLite.getData();
if(result.getCount() == 0)
{
Toast.makeText(this, "No data Found", Toast.LENGTH_SHORT).show();
}
while(result.moveToNext())
{
String custId = result.getString(1);
String custName = result.getString(0);
nameContact.put(custId, custName);
}
List<LinkedHashMap<String, String>> listItems = new ArrayList<>();
mCustomAdapter = new mCustomAdapter(this, listItems, R.layout.item_subitem, new String[]{"Id", "Name"}, new int[]{R.id.sampleCustId, R.id.sampleCustName});
Iterator it = nameContact.entrySet().iterator();
while (it.hasNext())
{
LinkedHashMap<String, String> nameContactMap = new LinkedHashMap<>();
Map.Entry pair = (Map.Entry) it.next();
nameContactMap.put("Id", pair.getKey().toString());
nameContactMap.put("Name", pair.getValue().toString());
listItems.add(nameContactMap);
}
listView.setAdapter(mCustomAdapter);
}
Here I am Directly using getFilter method of SimpleAdpater to filter list.
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 SimpleAdapter
{
public mCustomAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
{
super(context, data, resource, from, to);
}
@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)
{
if(convertView == null)
{
convertView= layoutInflater.inflate(R.layout.item_subitem, null);
}
TextView listCustID = convertView.findViewById(R.id.sampleCustId);
TextView listCustName = convertView.findViewById(R.id.sampleCustName);
Button sampleButton = convertView.findViewById(R.id.sampleButton);
listCustID.setText(custIdList.get(position));
listCustName.setText(custNameList.get(position));
sampleButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Log.i("ITEM ", custNameList.get(position)) ;
}
});
return convertView;
}
}