
嘿伙计们,我正在尝试在内置到片段中的ListvIEw中实现搜索功能
列表视图工作正常但是当我在edittext上键入以进行搜索时它会消失
我的代码:
public class DrinksFragment extends Fragment { private VIEw rootVIEw; private ArrayAdapter<DrinksList> adapter; private List<DrinksList> drinks; private ListVIEw lv; ArrayList<DrinksList> mAllData; @OverrIDe public VIEw onCreateVIEw(LayoutInflater inflater, @Nullable VIEwGroup container, @Nullable Bundle savedInstanceState) { rootVIEw = inflater.inflate(R.layout.activity_drinks_fragment, container, false); populateDrinksList(); doSearch(); return rootVIEw; } private voID doSearch() { final EditText et = (EditText)rootVIEw.findVIEwByID(R.ID.searchListDrinks); et.addTextChangedListener(new TextWatcher() { @OverrIDe public voID beforeTextChanged(CharSequence s, int start, int count, int after) { } @OverrIDe public voID onTextChanged(CharSequence s, int start, int before, int count) { } @OverrIDe public voID afterTextChanged(Editable s) { String text = et.getText().toString().tolowerCase(Locale.getDefault()); adapter.filter(text); } }); } private voID populateDrinksList() { drinks = new ArrayList<DrinksList>(); drinks.add(new DrinksList(R.drawable.coca, "Coca Cola", 2.50)); drinks.add(new DrinksList(R.drawable.cocalight, "Coca Cola light", 2.50)); drinks.add(new DrinksList(R.drawable.cocazero, "Coca Cola Zero", 2.50)); drinks.add(new DrinksList(R.drawable.orange, "Fanta Orange", 2.50)); drinks.add(new DrinksList(R.drawable.lemon, "Fanta Lemon", 2.50)); drinks.add(new DrinksList(R.drawable.ble, "Fanta Blue", 2.50)); drinks.add(new DrinksList(R.drawable.sprite, "Sprite", 2.50)); drinks.add(new DrinksList(R.drawable.soda, "Soda Water", 2.50)); drinks.add(new DrinksList(R.drawable.tonic, "Tonic Water", 2.50)); drinks.add(new DrinksList(R.drawable.ioli, "Sparkling Water Ioli", 2.50)); drinks.add(new DrinksList(R.drawable.perrIEr, "Sparkling Water PerrIEr", 2.50)); drinks.add(new DrinksList(R.drawable.nero, "Still Water", 2.00)); drinks.add(new DrinksList(R.drawable.redbull, "Red Bull", 4.00)); drinks.add(new DrinksList(R.drawable.zelita, "Zelita", 2.50)); lv = (ListVIEw)rootVIEw.findVIEwByID(R.ID.drinksListVIEw); adapter = new MyCustomDrinkslistadapter(getActivity().getApplicationContext(), R.layout.List_item, drinks); lv.setAdapter(adapter); }}public class DrinksFragment extends Fragment { private VIEw rootVIEw; private ArrayAdapter<DrinksList> adapter; private List<DrinksList> drinks; private ListVIEw lv; ArrayList<DrinksList> mAllData; @OverrIDe public VIEw onCreateVIEw(LayoutInflater inflater, @Nullable VIEwGroup container, @Nullable Bundle savedInstanceState) { rootVIEw = inflater.inflate(R.layout.activity_drinks_fragment, container, false); populateDrinksList(); doSearch(); return rootVIEw; } private voID doSearch() { final EditText et = (EditText)rootVIEw.findVIEwByID(R.ID.searchListDrinks); et.addTextChangedListener(new TextWatcher() { @OverrIDe public voID beforeTextChanged(CharSequence s, int start, int count, int after) { } @OverrIDe public voID onTextChanged(CharSequence s, int start, int before, int count) { DrinksFragment.this.adapter.getFilter().filter(s); } @OverrIDe public voID afterTextChanged(Editable s) { } }); } private voID populateDrinksList() { drinks = new ArrayList<DrinksList>(); drinks.add(new DrinksList(R.drawable.coca, "Coca Cola", 2.50)); drinks.add(new DrinksList(R.drawable.cocalight, "Coca Cola light", 2.50)); drinks.add(new DrinksList(R.drawable.cocazero, "Coca Cola Zero", 2.50)); drinks.add(new DrinksList(R.drawable.orange, "Fanta Orange", 2.50)); drinks.add(new DrinksList(R.drawable.lemon, "Fanta Lemon", 2.50)); drinks.add(new DrinksList(R.drawable.ble, "Fanta Blue", 2.50)); drinks.add(new DrinksList(R.drawable.sprite, "Sprite", 2.50)); drinks.add(new DrinksList(R.drawable.soda, "Soda Water", 2.50)); drinks.add(new DrinksList(R.drawable.tonic, "Tonic Water", 2.50)); drinks.add(new DrinksList(R.drawable.ioli, "Sparkling Water Ioli", 2.50)); drinks.add(new DrinksList(R.drawable.perrIEr, "Sparkling Water PerrIEr", 2.50)); drinks.add(new DrinksList(R.drawable.nero, "Still Water", 2.00)); drinks.add(new DrinksList(R.drawable.redbull, "Red Bull", 4.00)); drinks.add(new DrinksList(R.drawable.zelita, "Zelita", 2.50)); lv = (ListVIEw)rootVIEw.findVIEwByID(R.ID.drinksListVIEw); adapter = new MyCustomDrinkslistadapter(getActivity().getApplicationContext(), R.layout.List_item, drinks); lv.setAdapter(adapter); }}我的适配器:
public class MyCustomDrinkslistadapter extends ArrayAdapter<DrinksList> { private List<DrinksList> items = null; private ArrayList<DrinksList> arrayList; public MyCustomDrinkslistadapter(Context context, int layoutID, List<DrinksList> items) { super(context, layoutID, items); } @OverrIDe public VIEw getVIEw(int position, VIEw convertVIEw, VIEwGroup parent) { VIEw arrayVIEw = convertVIEw; if(arrayVIEw == null){ LayoutInflater vi; vi = LayoutInflater.from(getContext()); arrayVIEw = vi.inflate(R.layout.List_item, parent, false); } DrinksList currentposition = getItem(position); if(currentposition != null){ ImageVIEw image = (ImageVIEw)arrayVIEw.findVIEwByID(R.ID.product_image_coffee); image.setimageResource(currentposition.getimage()); TextVIEw name = (TextVIEw)arrayVIEw.findVIEwByID(R.ID.product_name_coffee); name.setText(currentposition.getname()); TextVIEw price = (TextVIEw)arrayVIEw.findVIEwByID(R.ID.product_price_coffee); price.setText(String.format("%.2f", currentposition.getPrice())); } return arrayVIEw; } public voID filter(String charText) { charText = charText.tolowerCase(Locale.getDefault()); items.clear(); if (charText.length() == 0) { items.addAll(arrayList); } else { for (DrinksList wp : arrayList) { if (wp.getname().tolowerCase(Locale.getDefault()) .contains(charText)) { items.add(wp); } } } notifyDataSetChanged(); }}我试过跟随AndroID开发者的例子,但我不能.
提前致谢!!
有任何想法吗??
解决方法:
而不是在Adapter类中添加filter方法. ..将它添加到你的片段..像这样..
public class DrinksFragment extends Fragment { private VIEw rootVIEw; private ArrayAdapter<DrinksList> adapter; private List<DrinksList> drinks; private ListVIEw lv; ArrayList<DrinksList> mAllData=new ArrayList<DrinksList>(); @OverrIDe public VIEw onCreateVIEw(LayoutInflater inflater, @Nullable VIEwGroup container, @Nullable Bundle savedInstanceState) { rootVIEw = inflater.inflate(R.layout.activity_drinks_fragment, container, false); populateDrinksList(); doSearch(); return rootVIEw; } private voID doSearch() { final EditText et = (EditText)rootVIEw.findVIEwByID(R.ID.searchListDrinks); et.addTextChangedListener(new TextWatcher() { @OverrIDe public voID beforeTextChanged(CharSequence s, int start, int count, int after) { } @OverrIDe public voID onTextChanged(CharSequence s, int start, int before, int count) { } @OverrIDe public voID afterTextChanged(Editable s) { String text = et.getText().toString().tolowerCase(Locale.getDefault()); filter(text); } }); } private voID populateDrinksList() { drinks = new ArrayList<DrinksList>(); drinks.add(new DrinksList(R.drawable.coca, "Coca Cola", 2.50)); drinks.add(new DrinksList(R.drawable.cocalight, "Coca Cola light", 2.50)); drinks.add(new DrinksList(R.drawable.cocazero, "Coca Cola Zero", 2.50)); drinks.add(new DrinksList(R.drawable.orange, "Fanta Orange", 2.50)); drinks.add(new DrinksList(R.drawable.lemon, "Fanta Lemon", 2.50)); drinks.add(new DrinksList(R.drawable.ble, "Fanta Blue", 2.50)); drinks.add(new DrinksList(R.drawable.sprite, "Sprite", 2.50)); drinks.add(new DrinksList(R.drawable.soda, "Soda Water", 2.50)); drinks.add(new DrinksList(R.drawable.tonic, "Tonic Water", 2.50)); drinks.add(new DrinksList(R.drawable.ioli, "Sparkling Water Ioli", 2.50)); drinks.add(new DrinksList(R.drawable.perrIEr, "Sparkling Water PerrIEr", 2.50)); drinks.add(new DrinksList(R.drawable.nero, "Still Water", 2.00)); drinks.add(new DrinksList(R.drawable.redbull, "Red Bull", 4.00)); drinks.add(new DrinksList(R.drawable.zelita, "Zelita", 2.50));mAllData.addAll(drinks); lv = (ListVIEw)rootVIEw.findVIEwByID(R.ID.drinksListVIEw); adapter = new MyCustomDrinkslistadapter(getActivity().getApplicationContext(), R.layout.List_item, drinks); lv.setAdapter(adapter); }public voID filter(String charText) { charText = charText.tolowerCase(Locale.getDefault()); drinks .clear(); if (charText.length() == 0) { drinks.addAll(mAllData); } else { for (DrinksList wp : mAllData) { if (wp.getname().tolowerCase(Locale.getDefault()) .contains(charText)) { drinks .add(wp); } } } notifyDataSetChanged(); }}你的Adapter类将保持不变(删除过滤器方法)..
public class MyCustomDrinkslistadapter extends ArrayAdapter<DrinksList> { // private List<DrinksList> items = null; // no use private ArrayList<DrinksList> arrayList; public MyCustomDrinkslistadapter(Context context, int layoutID, List<DrinksList> items) { super(context, layoutID, items); } @OverrIDe public VIEw getVIEw(int position, VIEw convertVIEw, VIEwGroup parent) { VIEw arrayVIEw = convertVIEw; if(arrayVIEw == null){ LayoutInflater vi; vi = LayoutInflater.from(getContext()); arrayVIEw = vi.inflate(R.layout.List_item, parent, false); } DrinksList currentposition = getItem(position); if(currentposition != null){ ImageVIEw image = (ImageVIEw)arrayVIEw.findVIEwByID(R.ID.product_image_coffee); image.setimageResource(currentposition.getimage()); TextVIEw name = (TextVIEw)arrayVIEw.findVIEwByID(R.ID.product_name_coffee); name.setText(currentposition.getname()); TextVIEw price = (TextVIEw)arrayVIEw.findVIEwByID(R.ID.product_price_coffee); price.setText(String.format("%.2f", currentposition.getPrice())); } return arrayVIEw; }}谢谢.希望它有效…… !! 1
总结以上是内存溢出为你收集整理的android – 在Fragment里面的ListView中实现搜索全部内容,希望文章能够帮你解决android – 在Fragment里面的ListView中实现搜索所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)