So the problem is that when I type in something it just won't search. I need it to do basic search like when I type a letter or number it will filter it.
This is my Adapter class:
public class KnjigeSearchAdapter extends ArrayAdapter<Knjiga> implements Filterable{
Context context;
private ArrayList<Knjiga> originalValues;
private NameFilter filter;
ArrayList<Knjiga> podaci = new ArrayList<>();
public KnjigeSearchAdapter(Context context,ArrayList<Knjiga> knjigas){
super(context, 0, knjigas);
this.context = context;
this.podaci = knjigas;
this.originalValues = new ArrayList<>();
this.originalValues.addAll(podaci);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Knjiga knjiga = getItem(position);
if (convertView == null){
convertView = LayoutInflater.from(getContext()).inflate(R.layout.search_knjiga_layout, parent, false);
}
TextView tvnazivK = (TextView)convertView.findViewById(R.id.textViewNazivKnjige);
TextView tvautorK = (TextView)convertView.findViewById(R.id.textViewAutorKnjige);
TextView tvisbn = (TextView)convertView.findViewById(R.id.textViewIsbnKnjige);
TextView tvGodina = (TextView)convertView.findViewById(R.id.textViewGodinaIzdKnjige);
TextView tvkatK = (TextView)convertView.findViewById(R.id.textViewKategorijaKnjige);
tvnazivK.setText(knjiga.getNaziv());
tvautorK.setText(knjiga.getAutor());
tvisbn.setText(knjiga.getIsbn());
tvGodina.setText(String.valueOf(knjiga.getGodinaIzdavanja()));
tvkatK.setText(knjiga.getKategorija());
return convertView;
}
@Override
public Filter getFilter() {
if(filter == null){
filter = new NameFilter();
}
return filter;
}
private class NameFilter extends Filter{
@Override
protected FilterResults performFiltering(CharSequence constraint) {
constraint = constraint.toString().toLowerCase();
FilterResults results = new FilterResults();
if(constraint != null && constraint.toString().length() > 0)
{
ArrayList<Knjiga> filtrirano = new ArrayList<>();
for(int i = 0, l = originalValues.size(); i < l; i++)
{
Knjiga knjiga = originalValues.get(i);
if(knjiga.toString().toLowerCase().contains(constraint))
filtrirano.add(knjiga);
}
results.count = filtrirano.size();
results.values = filtrirano;
}
else
{
synchronized(this)
{
results.values = originalValues;
results.count = originalValues.size();
}
}
return results;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
podaci = (ArrayList<Knjiga>)results.values;
notifyDataSetChanged();
clear();
for(int i = 0, l = podaci.size(); i < l; i++)
add(podaci.get(i));
notifyDataSetInvalidated();
}
}
}
This is my Activity class:
public class KorisnikSearchKnjigeActivity extends AppCompatActivity {
ListView lvPretragaknjiga;
SearchView svSearch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_korisnik_search_knjige);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
pretragaKnjiga();
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void pretragaKnjiga() {
lvPretragaknjiga = (ListView) findViewById(R.id.listViewListaKnjiga);
svSearch = (SearchView) findViewById(R.id.searchViewSearch);
MyDBHelper helper = new MyDBHelper(this);
final KnjigeSearchAdapter adapter = new KnjigeSearchAdapter(this, helper.getAllKnjige());
lvPretragaknjiga.setAdapter(adapter);
svSearch.setOnQueryTextListener(
new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
adapter.getFilter().filter(newText);
return true;
}
}
);
}
}