android– 在Fragment里面的ListView中实现搜索

android– 在Fragment里面的ListView中实现搜索,第1张

概述嘿伙计们,我正在尝试在内置到片段中的listview中实现搜索功能列表视图工作正常但是当我在edittext上键入以进行搜索时它会消失我的代码:publicclassDrinksFragmentextendsFragment{privateViewrootView;privateArrayAdapter<DrinksList>adapter;privat

嘿伙计们,我正在尝试在内置到片段中的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中实现搜索所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存