
我试图在我的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为空所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)