Rajiv Reddy
Rajiv Reddy

Reputation: 431

How to search in Custom List View

Hi Im having a custom List View but i am unable to code the right way for only filter/search the particular Person Name in CustomListView(Basically i am getting this from JSON and stored in ArrayList)... Please anyone help me with this method filter in CustomListViewAdapter.java

Here is my Main_Activity.Java Code

  array111.add(new AshTable(test1, test2, test3, test4, test5, test6, test7, test8, test9, test10, test11, test12, test13, test14, test15, test16, test17, test18, test19, test20, test21, test22, test23, test24, test25, test26, test27, test28, test29, test30, test31, test32, test33, test34, test35, test36, test37, test38, test39, test40, test41, test42));
            }


        } catch (JSONException e) {
            e.printStackTrace();
        }

        final CustomListViewAdapter adapter = new CustomListViewAdapter(getActivity(), R.layout.home_list_view, array111);
        lstv11.setAdapter(adapter);

        inputSearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub
                String text = inputSearch.getText().toString().toLowerCase(Locale.getDefault());
                adapter.filter(text);
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1,
                                          int arg2, int arg3) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2,
                                      int arg3) {
                // TODO Auto-generated method stub
            }
        });




        mSwipeRefreshLayout.setRefreshing(false);

    }

}

Here is my CustomListViewAdapter.java code

public class CustomListViewAdapter extends ArrayAdapter implements Filterable {

ArrayList<AshTable> prod;
Context context;
int resource;


public CustomListViewAdapter(Context context, int resource, ArrayList<AshTable> prod) {
    super(context, resource, prod);

    this.context=context;
    this.resource=resource;
    this.prod=prod;
}

@Override
public View getView(int position, View convertView, ViewGroup parent){

    if(convertView==null){

        LayoutInflater layoutInflater=(LayoutInflater)getContext().getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

        convertView=layoutInflater.inflate(R.layout.list_view,null,true);
    }

    AshTable pro=getItem(position);

    final   String  st1=pro.getCompname();
    final   String  st2=pro.getPersonname();
    final   String  st3=pro.getAddress();
    final   String  st4=pro.getMailid();
    final   String  st5=pro.getMob1();
    final   String  st6=pro.getMob2();
    final   String  st7=pro.getShowname();
    final   String  st8=pro.getDispatchdate();
    final   String  st9=pro.getDispatchtime();
    final   String  st10=pro.getStatedate();
    final   String  st11=pro.getStarttime();
    final   String  st12=pro.getSetupdate();
    final   String  st13=pro.getSetuptime();
    final   String  st14=pro.getEnddate();
    final   String  st15=pro.getEndtime();
    final   String  st16=pro.getDismanteldate();
    final   String  st17=pro.getDismanteltime();
    final   String  st18=pro.getVenu();
    final   String  st19=pro.getVenuaddress();
    final   String  st20=pro.getBoardsize();
    final   String  st21=pro.getOverallsqft();
    final   String  st22=pro.getRatepersqft();
    final   String  st23=pro.getTotalamt();
    final   String  st24=pro.getTransport();
    final   String  st25=pro.getStage();
    final   String  st26=pro.getPower();
    final   String  st27=pro.getOthercost1();
    final   String  st28=pro.getOthercost2();
    final   String  st29=pro.getGrossamt();
    final   String  st30=pro.getBillrequired();
    final   String  st31=pro.getBillinnameof();
    final   String  st32=pro.getServicetax();
    final   String  st33=pro.getTotalamt2();
    final   String  st34=pro.getAdvanceamt();
    final   String  st35=pro.getCreditperiod();
    final   String  st36=pro.getPhotoname();
    final   String  st37=pro.getPhotomob();
    final   String  st38=pro.getPhotoemail();
    final   String  st39=pro.getMarketingname();
    final   String  st40=pro.getRemark();



    TextView txt1=(TextView)convertView.findViewById(R.id.textView11);
    txt1.setText(pro.getPersonname());

    TextView txt2=(TextView)convertView.findViewById(R.id.textView22);
    txt2.setText(pro.getMob1());

    TextView txt3=(TextView)convertView.findViewById(R.id.textView33);
    txt3.setText(pro.getShowname());

    TextView txt5=(TextView)convertView.findViewById(R.id.textView44);
    txt5.setText(pro.getStatedate());

    TextView txt4=(TextView)convertView.findViewById(R.id.textView6);
    txt4.setText(pro.getEnddate());

    TextView txt6=(TextView)convertView.findViewById(R.id.textView55);
    txt6.setText(pro.getBoardsize());

    TextView txt7=(TextView)convertView.findViewById(R.id.teextView);
    txt7.setText("( "+pro.getCompname()+" )");



    Button imgb=(Button) convertView.findViewById(R.id.imageButton2);
    imgb.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent().setClass(getContext(), Full_info_page.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);

            intent.putExtra("name1", String.valueOf(st1));
            intent.putExtra("name2", String.valueOf(st2));
            intent.putExtra("name3", String.valueOf(st3));
            intent.putExtra("name4", String.valueOf(st4));
            intent.putExtra("name5", String.valueOf(st5));
            intent.putExtra("name6", String.valueOf(st6));
            intent.putExtra("name7", String.valueOf(st7));
            intent.putExtra("name8", String.valueOf(st8));
            intent.putExtra("name9", String.valueOf(st9));
            intent.putExtra("name10", String.valueOf(st10));
            intent.putExtra("name11", String.valueOf(st11));
            intent.putExtra("name12", String.valueOf(st12));
            intent.putExtra("name13", String.valueOf(st13));
            intent.putExtra("name14", String.valueOf(st14));
            intent.putExtra("name15", String.valueOf(st15));
            intent.putExtra("name16", String.valueOf(st16));
            intent.putExtra("name17", String.valueOf(st17));
            intent.putExtra("name18", String.valueOf(st18));
            intent.putExtra("name19", String.valueOf(st19));
            intent.putExtra("name20", String.valueOf(st20));
            intent.putExtra("name21", String.valueOf(st21));
            intent.putExtra("name22", String.valueOf(st22));
            intent.putExtra("name23", String.valueOf(st23));
            intent.putExtra("name24", String.valueOf(st24));
            intent.putExtra("name25", String.valueOf(st25));
            intent.putExtra("name26", String.valueOf(st26));
            intent.putExtra("name27", String.valueOf(st27));
            intent.putExtra("name28", String.valueOf(st28));
            intent.putExtra("name29", String.valueOf(st29));
            intent.putExtra("name30", String.valueOf(st30));
            intent.putExtra("name31", String.valueOf(st31));
            intent.putExtra("name32", String.valueOf(st32));
            intent.putExtra("name33", String.valueOf(st33));
            intent.putExtra("name34", String.valueOf(st34));
            intent.putExtra("name35", String.valueOf(st35));
            intent.putExtra("name36", String.valueOf(st36));
            intent.putExtra("name37", String.valueOf(st37));
            intent.putExtra("name38", String.valueOf(st38));
            intent.putExtra("name39", String.valueOf(st39));
            intent.putExtra("name40", String.valueOf(st40));


            context.startActivity(intent);
        }
    });

    return convertView;
}

public void filter(String charText) {
    charText = charText.toLowerCase(Locale.getDefault());

    if (charText.length() == 0) {

    } else {

    }
    notifyDataSetChanged();
}

}

Some one please Help me with this method filter to only filter person name or date....Thank You in Advance

Upvotes: 4

Views: 99

Answers (3)

BlackHatSamurai
BlackHatSamurai

Reputation: 23503

Basically what you have to do is to check each value in the list to see if it meets the filter requirements, and then add that to a temporary list. Once you have a complete list, you swap out the temp list into the array adapter list, in your case prod. You also have to account for no filter, or retrieving the complete list, so you will want to keep a reference to that list as well. All you have to do is create another array, and assign a copy of the original list to the reference list. All this might look something like this:

//Create reference list to keep track of complete list.
ArrayList<AshTable> refList = new ArrayList<AshTable>(); 

public CustomListViewAdapter(Context context, int resource, ArrayList<AshTable> prod) {
    super(context, resource, prod);

    this.context=context;
    this.resource=resource;
    this.prod=prod;
    this.refList = prod;
}



//Filter method
public void filter(String charText) {
    charText = charText.toLowerCase(Locale.getDefault());

    if (charText.length() == 0) {

        //if there is no data to filter, replace complete list
        prod.clear();
        prod.addAll(refList); 
    } else {


        //Temp array to store values that meet filter requirements
        ArrayList<AshTable> tempTable = new ArrayList<AshTable>(); 
        for(AshTable pro : prod){
            //here you can add any other filter requirements
            //just iterate through each item and check it.
            if(pro.getPersonname().contains(charText)){
                tempTable.add(pro); 
            }
        }

        //put filtered data into arraylist
        prod.clear();
        prod.addAll(tempTable);
    }
    notifyDataSetChanged();
}

Upvotes: 0

Ghanshyam Sharma
Ghanshyam Sharma

Reputation: 451

Please use this code :

 array111.add(new AshTable(test1, test2, test3, test4, test5, test6, test7, test8, test9, test10, test11, test12, test13, test14, test15, test16, test17, test18, test19, test20, test21, test22, test23, test24, test25, test26, test27, test28, test29, test30, test31, test32, test33, test34, test35, test36, test37, test38, test39, test40, test41, test42));
}


} catch (JSONException e) {
        e.printStackTrace();
        }

final CustomListViewAdapter adapter = new CustomListViewAdapter(getActivity(), R.layout.home_list_view, array111);
        lstv11.setAdapter(adapter);

        inputSearch.addTextChangedListener(new TextWatcher() {

@Override
public void afterTextChanged(Editable arg0) {
        // TODO Auto-generated method stub

        }

@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
        int arg2, int arg3) {
        // TODO Auto-generated method stub
        }

@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,
        int arg3) {
        if (YourClassName.this.adapter != null)
        ((YourAdapterClassName) YourClassName.this.adapter).getFilter().filter(arg0);

        }
        });




        mSwipeRefreshLayout.setRefreshing(false);

        }

 }

and your adapter class

public class YourAdapterClass extends BaseAdapter implements Filterable {
    ArrayList<AshTable> prod;
    ArrayList<AshTable> tempList;
    Context context;
    int resource;


    public CustomListViewAdapter(Context context, int resource, ArrayList<AshTable> prod) {
        super(context, resource, prod);

        this.context=context;
        this.resource=resource;
        this.prod=prod;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent){

        if(convertView==null){

            LayoutInflater layoutInflater=(LayoutInflater)getContext().getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

            convertView=layoutInflater.inflate(R.layout.list_view,null,true);
        }

        AshTable pro=getItem(position);

        final   String  st1=pro.getCompname();
        final   String  st2=pro.getPersonname();
        final   String  st3=pro.getAddress();
        final   String  st4=pro.getMailid();
        final   String  st5=pro.getMob1();
        final   String  st6=pro.getMob2();
        final   String  st7=pro.getShowname();
        final   String  st8=pro.getDispatchdate();
        final   String  st9=pro.getDispatchtime();
        final   String  st10=pro.getStatedate();
        final   String  st11=pro.getStarttime();
        final   String  st12=pro.getSetupdate();
        final   String  st13=pro.getSetuptime();
        final   String  st14=pro.getEnddate();
        final   String  st15=pro.getEndtime();
        final   String  st16=pro.getDismanteldate();
        final   String  st17=pro.getDismanteltime();
        final   String  st18=pro.getVenu();
        final   String  st19=pro.getVenuaddress();
        final   String  st20=pro.getBoardsize();
        final   String  st21=pro.getOverallsqft();
        final   String  st22=pro.getRatepersqft();
        final   String  st23=pro.getTotalamt();
        final   String  st24=pro.getTransport();
        final   String  st25=pro.getStage();
        final   String  st26=pro.getPower();
        final   String  st27=pro.getOthercost1();
        final   String  st28=pro.getOthercost2();
        final   String  st29=pro.getGrossamt();
        final   String  st30=pro.getBillrequired();
        final   String  st31=pro.getBillinnameof();
        final   String  st32=pro.getServicetax();
        final   String  st33=pro.getTotalamt2();
        final   String  st34=pro.getAdvanceamt();
        final   String  st35=pro.getCreditperiod();
        final   String  st36=pro.getPhotoname();
        final   String  st37=pro.getPhotomob();
        final   String  st38=pro.getPhotoemail();
        final   String  st39=pro.getMarketingname();
        final   String  st40=pro.getRemark();



        TextView txt1=(TextView)convertView.findViewById(R.id.textView11);
        txt1.setText(pro.getPersonname());

        TextView txt2=(TextView)convertView.findViewById(R.id.textView22);
        txt2.setText(pro.getMob1());

        TextView txt3=(TextView)convertView.findViewById(R.id.textView33);
        txt3.setText(pro.getShowname());

        TextView txt5=(TextView)convertView.findViewById(R.id.textView44);
        txt5.setText(pro.getStatedate());

        TextView txt4=(TextView)convertView.findViewById(R.id.textView6);
        txt4.setText(pro.getEnddate());

        TextView txt6=(TextView)convertView.findViewById(R.id.textView55);
        txt6.setText(pro.getBoardsize());

        TextView txt7=(TextView)convertView.findViewById(R.id.teextView);
        txt7.setText("( "+pro.getCompname()+" )");



        Button imgb=(Button) convertView.findViewById(R.id.imageButton2);
        imgb.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent().setClass(getContext(), Full_info_page.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);

                intent.putExtra("name1", String.valueOf(st1));
                intent.putExtra("name2", String.valueOf(st2));
                intent.putExtra("name3", String.valueOf(st3));
                intent.putExtra("name4", String.valueOf(st4));
                intent.putExtra("name5", String.valueOf(st5));
                intent.putExtra("name6", String.valueOf(st6));
                intent.putExtra("name7", String.valueOf(st7));
                intent.putExtra("name8", String.valueOf(st8));
                intent.putExtra("name9", String.valueOf(st9));
                intent.putExtra("name10", String.valueOf(st10));
                intent.putExtra("name11", String.valueOf(st11));
                intent.putExtra("name12", String.valueOf(st12));
                intent.putExtra("name13", String.valueOf(st13));
                intent.putExtra("name14", String.valueOf(st14));
                intent.putExtra("name15", String.valueOf(st15));
                intent.putExtra("name16", String.valueOf(st16));
                intent.putExtra("name17", String.valueOf(st17));
                intent.putExtra("name18", String.valueOf(st18));
                intent.putExtra("name19", String.valueOf(st19));
                intent.putExtra("name20", String.valueOf(st20));
                intent.putExtra("name21", String.valueOf(st21));
                intent.putExtra("name22", String.valueOf(st22));
                intent.putExtra("name23", String.valueOf(st23));
                intent.putExtra("name24", String.valueOf(st24));
                intent.putExtra("name25", String.valueOf(st25));
                intent.putExtra("name26", String.valueOf(st26));
                intent.putExtra("name27", String.valueOf(st27));
                intent.putExtra("name28", String.valueOf(st28));
                intent.putExtra("name29", String.valueOf(st29));
                intent.putExtra("name30", String.valueOf(st30));
                intent.putExtra("name31", String.valueOf(st31));
                intent.putExtra("name32", String.valueOf(st32));
                intent.putExtra("name33", String.valueOf(st33));
                intent.putExtra("name34", String.valueOf(st34));
                intent.putExtra("name35", String.valueOf(st35));
                intent.putExtra("name36", String.valueOf(st36));
                intent.putExtra("name37", String.valueOf(st37));
                intent.putExtra("name38", String.valueOf(st38));
                intent.putExtra("name39", String.valueOf(st39));
                intent.putExtra("name40", String.valueOf(st40));


                context.startActivity(intent);
            }
        });

        return convertView;
    }

    public Filter getFilter() {

        return mFilter;
    }




    private class ItemFilter extends Filter {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            String filterString = constraint.toString().toLowerCase();
            Filter.FilterResults results = new FilterResults();
            int count = tempList.size();
            final ArrayList<AshTable> nlist = new ArrayList<>();
            String filterableString ;
            for (int i = 0; i < count; i++) {
                filterableString = tempList.get(i).toString();
                if (filterableString.toLowerCase().contains(filterString)) {
                    nlist.add(tempList.get(i));
                }
            }
            results.values = nlist;
            results.count = nlist.size();
            return results;

        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            prod = (ArrayList<AshTable>) results.values;
            notifyDataSetChanged();
        }
    }


    }
}

Upvotes: 0

user7462841
user7462841

Reputation:

Make change in your adapeter class according to this sample code and concentrate on getFilter method although I have pasted complete adapter class for your reference.

public class CustomListAdapter extends BaseAdapter

{
    private Activity activity;
    private LayoutInflater inflater;
    private List<Movie> movieItems;
    private List<Movie> movieItemSearched = null;
    private List<Movie> originalMovieList;
    ImageLoader imageLoader = AppController.getInstance().getImageLoader();

    public CustomListAdapter(Activity activity, List<Movie> movieItems) {
        this.activity = activity;
        this.movieItems = movieItems;
        this.originalMovieList = new ArrayList<Movie>(movieItems);
        this.movieItemSearched = new ArrayList<Movie>();
        this.movieItemSearched.addAll(movieItems);
    }
    //Add Below Method
    public void reloadData(){
        this.originalMovieList = new ArrayList<Movie>(movieItems);
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return movieItems.size();
    }

    @Override
    public Object getItem(int location) {
        return movieItems.get(location);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if (inflater == null)
            inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (convertView == null)
            convertView = inflater.inflate(R.layout.list_row, null);

        if (imageLoader == null)
            imageLoader = AppController.getInstance().getImageLoader();
        NetworkImageView thumbNail = (NetworkImageView) convertView
                .findViewById(R.id.thumbnail);
        TextView title = (TextView) convertView.findViewById(R.id.title);
        TextView rating = (TextView) convertView.findViewById(R.id.rating);
        TextView genre = (TextView) convertView.findViewById(R.id.genre);
        TextView year = (TextView) convertView.findViewById(R.id.releaseYear);
        TextView appuser = (TextView) convertView.findViewById(R.id.appuser);
        TextView reg = (TextView) convertView.findViewById(R.id.reg);



//      LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100);
//      iv.setLayoutParams(layoutParams);
        // getting movie data for the row
        Movie m = movieItems.get(position);

        // thumbnail image
        thumbNail.setImageUrl(m.getThumbnailUrl(), imageLoader);

        // title
        title.setText(m.getTitle());

        // rating
        rating.setText(m.getRating());

        // genre
        genre.setText(m.getGenre());

        appuser.setText(m.getApp_user());

        reg.setText(m.getReg());

        year.setText(String.valueOf(m.getYear()));

        return convertView;
    }




    public Filter getFilter(ComponentName cn) {
        return new Filter() {

            @Override
            protected FilterResults performFiltering(CharSequence constraint) {

                String filterString = constraint.toString().toLowerCase();

                FilterResults results = new FilterResults();




                final List<Movie> list = originalMovieList;

                int count = list.size();
                final ArrayList<Movie> nlist = new ArrayList<Movie>(count);

                String filterableString1,filterableString2;
                        /*
                        for (int i = 0; i < count; i++) {
                            filterableString = list.get(i).getTitle();
                            if (filterableString.toLowerCase().contains(filterString)) {
                               // nlist.add(filterableString);
                                nlist.add(list.get(i));
                            }
                        }
                        */
                for (Movie movie: originalMovieList) {
                    filterableString1 = movie.getTitle();
                    filterableString2 = movie.getRating();

                    if (filterableString1.toLowerCase().contains(filterString)||filterableString2.toLowerCase().contains(filterString)) {
                        // nlist.add(filterableString);
                        nlist.add(movie);
                    }
                }

                results.values = nlist;
                results.count = nlist.size();

                return results;
            }

            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence constraint,
                                          FilterResults results) {
                movieItems.clear();
                movieItems.addAll((ArrayList<Movie>) results.values);
                notifyDataSetChanged();

            }
        };
    }


}

And Use this Method like this in your search View:

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        MenuInflater inflater = getMenuInflater();
        // Inflate menu to add items to action bar if it is present.
        inflater.inflate(R.menu.main, menu);

        SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView search = (SearchView) menu.findItem(R.id.action_search).getActionView();
        search.setSearchableInfo(manager.getSearchableInfo(getComponentName()));
        search.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return true;
            }

            @Override
            public boolean onQueryTextChange(String newText) {

                adapter.getFilter(getComponentName()).filter(newText);
                adapter.notifyDataSetChanged();


                return false;
            }

        });

        return true;
    }

Upvotes: 0

Related Questions