How to filter the data on list in Android.
Creating New Project.
Open android studio and create a new project.
File => New => New Project => Configure your new project => Select the form factor yours app will run on => Add an Activity to Mobile => Customize the Activity => Finish.
Create the Java file in project.
Open app => main => src = MainActivity.java
SearchView searchView=(SearchView)view.findViewById(R.id.searchView);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
(your adapter name).getFilter().filter(query);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
(your adapter name) getFilter().filter(newText);
return true;
}
});
//Click on listView
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CustomItem mReference = (CustomItem) parent.getAdapter().getItem(position);
if (String.valueOf(mReference) == null) {
Toast.makeText(getActivity(), "NO REFERENCE", Toast.LENGTH_SHORT).show();
} else {
Intent in = new Intent(getActivity(), DetailActivity.class);
in.putExtra("reference", mReference.getmReference());
startActivity(in);
}
}
});
Create the Java file in project.
Open app => main => src = CustomAdapter .java
/**
* Created by Saify on 3/21/2017.
**/
public class CustomAdapter extends BaseAdapter implements Filterable {
private static ArrayList<CustomItem> searchArrayList;
private LayoutInflater mInflater;
private ArrayList<CustomItem> orignalItems = new ArrayList<>();
private ItemFilter mFilter = new ItemFilter();
public CustomAdapter (Context context, ArrayList<CustomItem> results) {
this.searchArrayList = results;
this.orignalItems =results;
mInflater = LayoutInflater.from(context);
}
public int getCount() {
return searchArrayList.size();
}
public Object getItem(int position) {
return searchArrayList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.hotel_item, null);
holder = new ViewHolder();
holder.txtName = (TextView) convertView.findViewById(R.id.name);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.txtName.setText(searchArrayList.get(position).getName());
return convertView;
}
static class ViewHolder {
TextView txtName;
}
/**
* implement base BaseAdapter method here.....
*/
@Override
public Filter getFilter() {
return mFilter;
}
private class ItemFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
String filterString = constraint.toString().toLowerCase();
FilterResults results = new FilterResults();
final List<CustomItem> list = orignalItems;
int count = list.size();
final ArrayList<CustomItem> nlist = new ArrayList<CustomItem>(count);
String filterableString ;
for (int i = 0; i < count; i++) {
filterableString = list.get(i).name;
if (filterableString.toLowerCase().contains(filterString)) {
CustomItem mYourCustomData = list.get(i);
nlist.add(mYourCustomData);
// nlist.add(filterableString);
}
}
results.values = nlist;
results.count = nlist.size();
return results;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
searchArrayList = (ArrayList<CustomItem>) results.values;
notifyDataSetChanged();
}
}
}
Creating New Project.
Open android studio and create a new project.
File => New => New Project => Configure your new project => Select the form factor yours app will run on => Add an Activity to Mobile => Customize the Activity => Finish.
Create the Java file in project.
Open app => main => src = MainActivity.java
SearchView searchView=(SearchView)view.findViewById(R.id.searchView);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
(your adapter name).getFilter().filter(query);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
(your adapter name) getFilter().filter(newText);
return true;
}
});
//Click on listView
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CustomItem mReference = (CustomItem) parent.getAdapter().getItem(position);
if (String.valueOf(mReference) == null) {
Toast.makeText(getActivity(), "NO REFERENCE", Toast.LENGTH_SHORT).show();
} else {
Intent in = new Intent(getActivity(), DetailActivity.class);
in.putExtra("reference", mReference.getmReference());
startActivity(in);
}
}
});
Create the Java file in project.
Open app => main => src = CustomAdapter .java
/**
* Created by Saify on 3/21/2017.
**/
public class CustomAdapter extends BaseAdapter implements Filterable {
private static ArrayList<CustomItem> searchArrayList;
private LayoutInflater mInflater;
private ArrayList<CustomItem> orignalItems = new ArrayList<>();
private ItemFilter mFilter = new ItemFilter();
public CustomAdapter (Context context, ArrayList<CustomItem> results) {
this.searchArrayList = results;
this.orignalItems =results;
mInflater = LayoutInflater.from(context);
}
public int getCount() {
return searchArrayList.size();
}
public Object getItem(int position) {
return searchArrayList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.hotel_item, null);
holder = new ViewHolder();
holder.txtName = (TextView) convertView.findViewById(R.id.name);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.txtName.setText(searchArrayList.get(position).getName());
return convertView;
}
static class ViewHolder {
TextView txtName;
}
/**
* implement base BaseAdapter method here.....
*/
@Override
public Filter getFilter() {
return mFilter;
}
private class ItemFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
String filterString = constraint.toString().toLowerCase();
FilterResults results = new FilterResults();
final List<CustomItem> list = orignalItems;
int count = list.size();
final ArrayList<CustomItem> nlist = new ArrayList<CustomItem>(count);
String filterableString ;
for (int i = 0; i < count; i++) {
filterableString = list.get(i).name;
if (filterableString.toLowerCase().contains(filterString)) {
CustomItem mYourCustomData = list.get(i);
nlist.add(mYourCustomData);
// nlist.add(filterableString);
}
}
results.values = nlist;
results.count = nlist.size();
return results;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
searchArrayList = (ArrayList<CustomItem>) results.values;
notifyDataSetChanged();
}
}
}
No comments:
Post a Comment