【问题标题】:ExpandableListView child order is incorrect after filter过滤后 ExpandableListView 子顺序不正确
【发布时间】:2015-04-22 21:02:17
【问题描述】:

大家好,这就是我向可扩展列表添加内容的方式..

listDataHeader = new ArrayList(Arrays.asList("Afghanistan",
            "Albania",
            "Algeria",
            "Andorra",
            "Angola",
            "Anguilla",
            "Antigua and Barbuda",
            "Argentina",
            "Armenia",
            "Aruba",`........`

listDataChild = new HashMap>();

// Adding child data
List<String> Afghanistan = new ArrayList<String>();
Afghanistan.add("Dari");
Afghanistan.add("Pashto");


List<String> Albania = new ArrayList<String>();
Albania.add("Albanian");
Albania.add("Greek");

List<String> Algeria = new ArrayList<String>();
Algeria.add("Arabic");
Algeria.add("French");
Algeria.add("Berber Dialects");

过滤后

private class ItemFilter extends Filter {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {

            String filterString = constraint.toString().toLowerCase();

            FilterResults results = new FilterResults();

            final List<String> list = originalData;
            final HashMap<String, List<String>> childList = originalDatachild;

            int count = list.size();
            final ArrayList<String> nlist = new ArrayList<String>(count);
            final HashMap<String, List<String>> nlistChild= new HashMap<String, List<String>>();
            int counterFilter=0;
            String filterableString ;

            for (int i = 0; i < count; i++) {
                filterableString = list.get(i);
                if (filterableString.toLowerCase().contains(filterString)) {
                    nlist.add(filterableString);
                    /*int ii = i;
                    counterFilter++;
                    while(childList.get(ii)!=null) {
                        nlistChild.put(nlist.get(counterFilter),);
                        ii++;


                    }*/
                }
            }


            results.values = nlist;

            results.count = nlist.size();

            return results;
        }

输出很好...但是子项不符合父项。我不知道该怎么做..我想我必须找到一种替代方法将子项添加到列表中,而不是以下现有方法..

listDataChild.put(listDataHeader.get(0), Afghanistan);//Header,Child data
listDataChild.put(listDataHeader.get(1), Albania);
listDataChild.put(listDataHeader.get(2), Algeria);
listDataChild.put(listDataHeader.get(3), Andorra);
listDataChild.put(listDataHeader.get(4), Angola);
listDataChild.put(listDataHeader.get(5), Anguilla);

有什么帮助吗?

【问题讨论】:

    标签: android expandablelistview android-filterable


    【解决方案1】:

    已解决:

    设置 getChild() 和 getChildrenCount() 正确解决了它。

    public int getChildrenCount(int groupPosition) {
        return this.filteredDatachild.get(this.filteredData.get(groupPosition))
                .size();
    }
    
    
    
    public Object getChild(int groupPosition, int childPosititon) {
            return this.filteredDatachild.get(this.filteredData.get(groupPosition))
                    .get(childPosititon);
        }
    

    并像这样创建新的子列表:

    for (int i = 0; i < count; i++) {
                filterableString = list.get(i);
                if (filterableString.toLowerCase().contains(filterString)) {
                    nlist.add(filterableString);
    
    
                    nchildlist.put(nlist.get(ii),originalDatachild.get(nlist.get(ii)));
                    ii++;
                    Log.d( "Child Items:", "Child index:" + ii);
                }
    

    【讨论】:

    • 如果顺序很重要,请使用 LinkedHashMap
    猜你喜欢
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 2021-06-09
    相关资源
    最近更新 更多