Search code examples
androidarrayslistviewsearchsearchview

Search in custom ListView


the problem in search is start only of first word example : search in "Real Madrid" , if search of "Madrid" not give result , but if search of "Real" give me result because the word "real" is first word So what is the solution to this problem? Thank you :)

public void setAdapterToListview() {
    objAdapter = new LatestGridAdapter(getActivity(), R.layout.latest_lsv_item,
            arrayOfLatestVideo,columnWidth);
    lsv_latest.setAdapter(objAdapter);
}

public void showToast(String msg) {
    Toast.makeText(getActivity(), msg, Toast.LENGTH_LONG).show();
}

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.menu_search, menu);

    final SearchView searchView = (SearchView) menu.findItem(R.id.search)
            .getActionView();

    final MenuItem searchMenuItem = menu.findItem(R.id.search);
    searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            // TODO Auto-generated method stub
            if(!hasFocus) {
                 searchMenuItem.collapseActionView();
                searchView.setQuery("", false);
            }
        }
    });


    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextChange(String newText) {

            textlength=newText.length();
            arrayOfLatestVideo.clear();

            for(int i=0;i< allArrayVideoName.length;i++)
            {
                if(textlength <= allArrayVideoName[i].length())
                {
                    if(newText.toString().equalsIgnoreCase((String) allArrayVideoName[i].substring(0, textlength)))
                    {


                        ItemLatest objItem = new ItemLatest();

                        objItem.setId(Integer.parseInt(allArrayVideoId[i]));
                        objItem.setCategoryId(Integer.parseInt(allArrayVideoCatId[i]));
                        objItem.setCategoryName(allArrayVideoCatName[i]);
                        objItem.setDescription(allArrayVideoDesc[i]);
                        objItem.setVideoId(allArrayVideo[i]);
                        objItem.setVideoName(allArrayVideoName[i]);
                        objItem.setVideoUrl(allArrayVideourl[i]);
                        objItem.setImageUrl(allArrayImageUrl[i]);
                        arrayOfLatestVideo.add(objItem);

                    }
                }
            }

            setAdapterToListview();
            return false;
        }

        @Override
        public boolean onQueryTextSubmit(String query) {
            // Do something
            return true;
        }
    });

}

Solution

  • Try this method for searching. If it returns anything other than -1 it means that it's found a match. I turn everything into lowercase so you don't have to worry about case sensitivity.

        @Override
        public boolean onQueryTextChange(String newText) {
    
            textlength=newText.length();
            arrayOfLatestVideo.clear();
    
            for(int i=0;i< allArrayVideoName.length;i++)
            {
                if(textlength <= allArrayVideoName[i].length())
                {
                    if(allArrayVideoName[i].toLowerCase().indexOf(newText.toLowerCase())!=-1)
                    {
                        ItemLatest objItem = new ItemLatest();
    
                        objItem.setId(Integer.parseInt(allArrayVideoId[i]));
                        objItem.setCategoryId(Integer.parseInt(allArrayVideoCatId[i]));
                        objItem.setCategoryName(allArrayVideoCatName[i]);
                        objItem.setDescription(allArrayVideoDesc[i]);
                        objItem.setVideoId(allArrayVideo[i]);
                        objItem.setVideoName(allArrayVideoName[i]);
                        objItem.setVideoUrl(allArrayVideourl[i]);
                        objItem.setImageUrl(allArrayImageUrl[i]);
                        arrayOfLatestVideo.add(objItem);
    
                    }
                }
            }
    
            setAdapterToListview();
            return false;
        }