自定义getFilter自定义适配器(Custom getFilter for Custom Adapter)

编程入门 行业动态 更新时间:2024-10-28 12:20:28
自定义getFilter自定义适配器(Custom getFilter for Custom Adapter)

我正在写周期表软件,一部分是化学公式列表。 该应用程序允许用户从列表中搜索,但我在筛选结果时遇到了一些麻烦

在这里我有什么:

FurmulaProvider.java

public class FurmolaProvider { private int id; private String sympol; private String name; public FurmolaProvider(int id, String sym, String name) { this.setId(id); this.setName(name); this.setSympol(sym); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getSympol() { return sympol; } public void setSympol(String sympol) { this.sympol = sympol; } public String getName() { return name; } public void setName(String name) { this.name = name; } } }

自定义适配器是:

public class FurmolaAdapter extends ArrayAdapter implements Filterable { List list = new ArrayList<>(); List disp_ls = new ArrayList<>(); public FurmolaAdapter(Context context, int resource) { super(context, resource); } @NonNull @Override public View getView(int position, View convertView, ViewGroup parent) { View row; row = convertView; DataHandler handler; if (convertView == null) { LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); row = inflater.inflate(R.layout.formula_item, parent, false); handler = new DataHandler(); handler.molar = (TextView) row.findViewById(R.id.molar_mass_item); handler.name = (TextView) row.findViewById(R.id.name_item); handler.sympol = (TextView) row.findViewById(R.id.symp_item); row.setTag(handler); }else { handler = new DataHandler(); handler.molar = (TextView) row.findViewById(R.id.molar_mass_item); handler.name = (TextView) row.findViewById(R.id.name_item); handler.sympol = (TextView) row.findViewById(R.id.symp_item); row.setTag(handler); } FurmolaProvider provider ; provider = (FurmolaProvider) this.getItem(position); handler.molar.setText(provider.getMolar() + " "); handler.molar.setBackground(getContext().getResources().getDrawable (R.drawable.molar_back)); handler.name.setText(provider.getName()); handler.sympol.setText(provider.getSympol()); return row; } private int getColor (double mole){ int res = 0; if (mole > 250 && mole < 500) { } return android.R.color.holo_green_dark; } @Override public void add(Object object) { super.add(object); list.add(object); disp_ls.add(object); } static class DataHandler { TextView molar; TextView sympol; TextView name; } @Override public int getCount() { return this.list.size(); } @Nullable @Override public Object getItem(int position) { return this.list.get(position); } @NonNull @Override public Filter getFilter() { Filter filter = new Filter() { @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults results = new FilterResults(); List filtList = new ArrayList<>(); if (list == null) { list = new ArrayList(disp_ls); } if (constraint == null || constraint.length() == 0) { // set the Original result to return results.count = disp_ls.size(); results.values = disp_ls; } else { constraint = constraint.toString().toLowerCase(); for(int i=0; i < disp_ls.size() ; i++) { FurmolaProvider data = (FurmolaProvider) disp_ls.get(i); String da = data.getSympol() + " " + data.getName() ; if (da.toLowerCase().contains(constraint)) { filtList.add(disp_ls.get(i)); } } results.count = filtList.size(); results.values = filtList; } return results; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { list = (List) results.values; notifyDataSetChanged(); } }; return super.getFilter(); } }

注意:disp_ls具有所有元素

当我运行这个代码时,什么都没有发生。 你能帮我吗 ?! :)

I'm writing periodic table software, and one section is a list of chemical formulas. The app allows the user to search from the list but i get some trouble in filtering the results

and here what I have :

FurmulaProvider.java

public class FurmolaProvider { private int id; private String sympol; private String name; public FurmolaProvider(int id, String sym, String name) { this.setId(id); this.setName(name); this.setSympol(sym); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getSympol() { return sympol; } public void setSympol(String sympol) { this.sympol = sympol; } public String getName() { return name; } public void setName(String name) { this.name = name; } } }

And the Custom Adapter is :

public class FurmolaAdapter extends ArrayAdapter implements Filterable { List list = new ArrayList<>(); List disp_ls = new ArrayList<>(); public FurmolaAdapter(Context context, int resource) { super(context, resource); } @NonNull @Override public View getView(int position, View convertView, ViewGroup parent) { View row; row = convertView; DataHandler handler; if (convertView == null) { LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); row = inflater.inflate(R.layout.formula_item, parent, false); handler = new DataHandler(); handler.molar = (TextView) row.findViewById(R.id.molar_mass_item); handler.name = (TextView) row.findViewById(R.id.name_item); handler.sympol = (TextView) row.findViewById(R.id.symp_item); row.setTag(handler); }else { handler = new DataHandler(); handler.molar = (TextView) row.findViewById(R.id.molar_mass_item); handler.name = (TextView) row.findViewById(R.id.name_item); handler.sympol = (TextView) row.findViewById(R.id.symp_item); row.setTag(handler); } FurmolaProvider provider ; provider = (FurmolaProvider) this.getItem(position); handler.molar.setText(provider.getMolar() + " "); handler.molar.setBackground(getContext().getResources().getDrawable (R.drawable.molar_back)); handler.name.setText(provider.getName()); handler.sympol.setText(provider.getSympol()); return row; } private int getColor (double mole){ int res = 0; if (mole > 250 && mole < 500) { } return android.R.color.holo_green_dark; } @Override public void add(Object object) { super.add(object); list.add(object); disp_ls.add(object); } static class DataHandler { TextView molar; TextView sympol; TextView name; } @Override public int getCount() { return this.list.size(); } @Nullable @Override public Object getItem(int position) { return this.list.get(position); } @NonNull @Override public Filter getFilter() { Filter filter = new Filter() { @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults results = new FilterResults(); List filtList = new ArrayList<>(); if (list == null) { list = new ArrayList(disp_ls); } if (constraint == null || constraint.length() == 0) { // set the Original result to return results.count = disp_ls.size(); results.values = disp_ls; } else { constraint = constraint.toString().toLowerCase(); for(int i=0; i < disp_ls.size() ; i++) { FurmolaProvider data = (FurmolaProvider) disp_ls.get(i); String da = data.getSympol() + " " + data.getName() ; if (da.toLowerCase().contains(constraint)) { filtList.add(disp_ls.get(i)); } } results.count = filtList.size(); results.values = filtList; } return results; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { list = (List) results.values; notifyDataSetChanged(); } }; return super.getFilter(); } }

Note: disp_ls have all the elements

,

when i run this code, nothing happened. can you help ?! :)

最满意答案

你必须返回你创建的过滤器

return filter;

代替

return super.getFilter();

You have to return the filter you created

return filter;

instead of

return super.getFilter();

更多推荐

本文发布于:2023-07-04 08:52:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1021930.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:自定义   适配器   Adapter   getFilter   Custom

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!