java– 使用getFilter函数时ListView为空

java– 使用getFilter函数时ListView为空,第1张

概述我试图在我的ListView中实现getFilter()函数,但每次我在EditText中输入内容时,我的ListView都会消失.我的SetHelpRows文件:publicclassSetHelpRows{Stringname;Stringid;publicStringgetName(){returnname;}publicvoidsetName(

我试图在我的ListVIEw中实现getFilter()函数,但每次我在EditText中输入内容时,我的ListVIEw都会消失.

我的SetHelpRows文件:

public class SetHelpRows {    String name;    String ID;    public String getname () {        return name;    }    public voID setname (String name) {        this.name = name;    }    public String getID () {        return ID;    }    public voID setID (String ID) {        this.ID = ID;    }    public SetHelpRows(String name, String ID) {        super();        this.name = name;        this.ID = ID;    }}

我的SetHelpRowsCustomAdapter文件:

import java.util.ArrayList;import androID.app.Activity;import androID.content.Context;import androID.util.Log;import androID.vIEw.LayoutInflater;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.ArrayAdapter;import androID.Widget.Filter;import androID.Widget.ImageVIEw;import androID.Widget.TextVIEw;public class SetRowsCustomAdapter extends ArrayAdapter<SetRows> {    Context context;   int layoutResourceID;   ArrayList<SetRows> data=new ArrayList<SetRows>();   private ArrayList<SetRows> original;   private ArrayList<SetRows> fitems;   private Filter filter;   public SetRowsCustomAdapter(Context context, int layoutResourceID, ArrayList<SetRows> data) {       super(context, layoutResourceID, data);       this.layoutResourceID = layoutResourceID;       this.context = context;       this.data = data;       this.original = data;//new ArrayList<Pkmn>();       this.fitems = data;//new ArrayList<Pkmn>();   }   @OverrIDe   public VIEw getVIEw(int position, VIEw convertVIEw, VIEwGroup parent) {       VIEw row = convertVIEw;       ImageHolder holder = null;       if(row == null)       {           LayoutInflater inflater = ((Activity)context).getLayoutInflater();           row = inflater.inflate(layoutResourceID, parent, false);           holder = new ImageHolder();           holder.txtTitle = (TextVIEw)row.findVIEwByID(R.ID.txtTitle);           holder.imgIcon = (ImageVIEw)row.findVIEwByID(R.ID.imgIcon);           holder.txtID = (TextVIEw)row.findVIEwByID(R.ID.txtModDate);           row.setTag(holder);       }       else       {           holder = (ImageHolder)row.getTag();       }       SetRows myImage = data.get(position);       holder.txtTitle.setText(myImage.name);       holder.txtID.setText(myImage.ID);       int outimage=myImage.image;       holder.imgIcon.setimageResource(outimage);      return row;   }   static class ImageHolder   {       ImageVIEw imgIcon;       TextVIEw txtTitle;       TextVIEw txtID;   }   @OverrIDe   public Filter getFilter()   {       if (filter == null) {           Log.i("Before Filter", "Before Filter");           filter = new PkmnnameFilter();       }       return filter;   }   private class PkmnnameFilter extends Filter   {           @OverrIDe           protected FilterResults performFiltering(CharSequence constraint)           {                  FilterResults results = new FilterResults();               String prefix = constraint.toString().tolowerCase();               if (prefix == null || prefix.length() == 0)               {                   Log.i("prefix is null or 0", "prefix is null or 0");                   ArrayList<SetRows> List = new ArrayList<SetRows>(original);                   results.values = List;                   results.count = List.size();               }               else               {                   Log.i("prefix is !null or !0", "prefix is !null or !0");                   final ArrayList<SetRows> List = new ArrayList<SetRows>(original);                   final ArrayList<SetRows> nList = new ArrayList<SetRows>();                   int count = List.size();                   for (int i=0; i<count; i++)                   {                       final SetRows pkmn = List.get(i);                       final String value = pkmn.getname().tolowerCase();                       if (value.startsWith(prefix))                       {                           nList.add(pkmn);                       }                   }                   results.values = nList;                   results.count = nList.size();               }               return results;           }           @SuppressWarnings("unchecked")           @OverrIDe           protected voID publishResults(CharSequence constraint, FilterResults results) {               Log.i("publish result", "publish result");               fitems = (ArrayList<SetRows>)results.values;               clear();               int count = fitems.size();               for (int i=0; i<count; i++)               {                   SetRows pkmn = (SetRows)fitems.get(i);                   add(pkmn);               }           }       }}

我的部分MainActivity文件:

inputSearch = (EditText) findVIEwByID(R.ID.etSearch);dataList = (ListVIEw) findVIEwByID(R.ID.lvfiles);for (int y=0; y<strnames.length;y++) {    name = strnamesOfAllah[y];    meaning = strMeaning[y];    rowsArray.add(new SetRows(R.drawable.icon, name, meaning));}adapter = new SetRowsCustomAdapter(MainActivity.this, R.layout.customList, rowsArray);dataList.setAdapter(adapter);dataList.setClickable(true);inputSearch.addTextChangedListener(new TextWatcher() {    @OverrIDe    public voID onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {        // When user changed the Text        //MainActivity.this.adapter.getFilter().filter(cs);        //String text = inputSearch.getText().toString().tolowerCase();        adapter.getFilter().filter(cs.toString().tolowerCase(Locale.US));    }    @OverrIDe    public voID beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {        //Todo auto-generated method stub    }    @OverrIDe    public voID afterTextChanged(Editable arg0) {        //Todo auto-generated method stub                             }});

在LogCat中,我看到以下内容:

12-12 12:15:57.077: I/Before Filter(720): Before Filter12-12 12:15:57.106: I/prefix is !null or !0(720): prefix is !null or !012-12 12:15:57.216: I/publish result(720): publish result

解决方法:

我修改了我的代码并且能够让它运行起来.如果有人想使用它,请成为我的客人:)

SetRows Java文件:

public class SetRows {    int image;    String name;    String ID;    public int getimage () {        return image;    }    public voID setimage (int image) {        this.image = image;    }    public String getname () {        return name;    }    public voID setname (String name) {        this.name = name;    }    public String getID () {        return ID;    }    public voID setID (String ID) {        this.ID = ID;    }    public SetRows(int image, String name, String ID) {        super();        this.image = image;        this.name = name;        this.ID = ID;    }    @OverrIDe    public String toString() {        return  image + " " + name + " " + ID;    }}

SetRowsCustomAdapter Java文件:

import java.util.ArrayList;import androID.app.Activity;import androID.content.Context;import androID.vIEw.LayoutInflater;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.ArrayAdapter;import androID.Widget.Filter;import androID.Widget.ImageVIEw;import androID.Widget.TextVIEw;public class SetRowsCustomAdapter extends ArrayAdapter<SetRows> {    Context context;   int layoutResourceID;   ArrayList<SetRows> data=new ArrayList<SetRows>(); //data = countryList   private ArrayList<SetRows> originalList;   private nameFilter filter;   public SetRowsCustomAdapter(Context context, int layoutResourceID, ArrayList<SetRows> data) {       super(context, layoutResourceID, data);       this.layoutResourceID = layoutResourceID;       this.context = context;       this.data = data;       //this.data.addAll(data);       this.originalList = new ArrayList<SetRows>();       this.originalList.addAll(data);   }   @OverrIDe   public VIEw getVIEw(int position, VIEw convertVIEw, VIEwGroup parent) {       VIEw row = convertVIEw;       ImageHolder holder = null;       if(row == null)       {           LayoutInflater inflater = ((Activity)context).getLayoutInflater();           row = inflater.inflate(layoutResourceID, parent, false);           holder = new ImageHolder();           holder.txtTitle = (TextVIEw)row.findVIEwByID(R.ID.txtTitle);           holder.imgIcon = (ImageVIEw)row.findVIEwByID(R.ID.imgIcon);           holder.txtID = (TextVIEw)row.findVIEwByID(R.ID.txtModDate);           row.setTag(holder);       }       else       {           holder = (ImageHolder)row.getTag();       }       SetRows myImage = data.get(position);       holder.txtTitle.setText(myImage.name);       holder.txtID.setText(myImage.ID);       int outimage=myImage.image;       holder.imgIcon.setimageResource(outimage);      return row;   }   static class ImageHolder   {       ImageVIEw imgIcon;       TextVIEw txtTitle;       TextVIEw txtID;   }   @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 result = new FilterResults();     if(constraint != null && constraint.toString().length() > 0)     {     ArrayList<SetRows> filteredItems = new ArrayList<SetRows>();     for(int i = 0, l = originalList.size(); i < l; i++)     {      SetRows nameList = originalList.get(i);      if(nameList.toString().tolowerCase().contains(constraint))       filteredItems.add(nameList);     }     result.count = filteredItems.size();     result.values = filteredItems;     }     else     {      synchronized(this)      {       result.values = originalList;       result.count = originalList.size();      }     }     return result;    }    @SuppressWarnings("unchecked")    @OverrIDe    protected voID publishResults(CharSequence constraint,      FilterResults results) {     data = (ArrayList<SetRows>)results.values;     notifyDataSetChanged();     clear();     for(int i = 0, l = data.size(); i < l; i++)      add(data.get(i));     notifyDataSetInvalIDated();    }   }}

其他一切都保持不变:)

我希望人们发现它对自己的应用程序有用.

总结

以上是内存溢出为你收集整理的java – 使用getFilter函数时ListView为空全部内容,希望文章能够帮你解决java – 使用getFilter函数时ListView为空所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1104167.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存