java–Android ExpandableListView填充两次

java–Android ExpandableListView填充两次,第1张

概述我正在使用可扩展列表视图分别在菜单中显示选项和子选项.进来的数据是正确的,但奇怪的是listview似乎为每个数据条目调用了两次getChild和getChildView,因此它被添加到视图两次.它迭代,然后似乎再次迭代.例:分类: -玩具 -电子产品 -汽车 -玩具 -电子产品 -汽车预期:分类: -

我正在使用可扩展列表视图分别在菜单中显示选项和子选项.进来的数据是正确的,但奇怪的是ListvIEw似乎为每个数据条目调用了两次getChild和getChildVIEw,因此它被添加到视图两次.它迭代,然后似乎再次迭代.

例:

分类:
 -玩具
 -电子产品
 -汽车
 -玩具
 -电子产品
 -汽车

预期:
分类:
 -玩具
 -电子产品
 -汽车

我对Android和Java真的很陌生,所以我可能会犯一个菜鸟错误.我已经介入尝试找到一个重复数据的点,但我能找到的是getChild / getChildVIEw被调用两次.

这是expandableListVIEw适配器类:

    public class expandablelistadapter extends Baseexpandablelistadapter {    private Context context;    private ArrayList<String> filterheaderList;    // child data in format of header Title, child Title    private HashMap<String, ArrayList<JsONObject>> filterOptionsMap;    public expandablelistadapter(Context context, ArrayList<String> filterheaders, HashMap<String, ArrayList<JsONObject>> filterChildListMap) {        this.context = context;        this.filterheaderList = filterheaders;        this.filterOptionsMap = filterChildListMap;    }    @OverrIDe    public String[] getChild(int groupposition, int childPosititon) {        JsONObject childobject = this.filterOptionsMap.get(this.filterheaderList.get(groupposition)).get(childPosititon);        if (childobject != null) {            Iterator<?> it = childobject.keys();            String key = null;            String value = null;            if (it.hasNext()) {                key = it.next().toString();                try {                    value = childobject.getString(key);                } catch (JsONException e) {                    e.printstacktrace();                }                String[] data = new String[2];                data[0] = key;                data[1] = value;                return data;            } else {                return null;            }        }        return null;    }    @OverrIDe    public long getChildID(int groupposition, int childposition) {        return childposition;    }    @OverrIDe    public VIEw getChildVIEw(int groupposition, final int childposition, boolean isLastChild, VIEw convertVIEw, VIEwGroup parent) {        String childNum = null;        String childText = null;        final String[] childData = (String[]) getChild(groupposition, childposition);        if (childData != null) {            childNum = childData[0];            childText = childData[1];        }        if (convertVIEw == null) {            LayoutInflater infalinflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);            convertVIEw = infalinflater.inflate(R.layout.ps_filter_sort_filter_expandable_child, null);        }        TextVIEw tvChildTitle = (TextVIEw) convertVIEw.findVIEwByID(R.ID.ps_filter_sort_filter_expandable_child_Title);        tvChildTitle.setText(childText);        tvChildTitle.setTag(R.ID.ps_filter_sort_filter_expandable_child_Title + groupposition + childposition, childNum);        return convertVIEw;    }    @OverrIDe    public int getChildrenCount(int groupposition) {        return this.filterOptionsMap.get(this.filterheaderList.get(groupposition)).size();    }    @OverrIDe    public String getGroup(int groupposition) {        return this.filterheaderList.get(groupposition);    }    @OverrIDe    public int getGroupCount() {        return this.filterheaderList.size();    }    @OverrIDe    public long getGroupID(int groupposition) {        return groupposition;    }    @OverrIDe    public VIEw getGroupVIEw(int groupposition, boolean isExpanded, VIEw convertVIEw, VIEwGroup parent) {        String headerTitle = (String) getGroup(groupposition);        if (convertVIEw == null) {            LayoutInflater infalinflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);            convertVIEw = infalinflater.inflate(R.layout.ps_filter_sort_filter_expandable_parent, null);        }        TextVIEw tvGroupTitle = (TextVIEw) convertVIEw.findVIEwByID(R.ID.ps_filter_sort_filter_expandable_parent_Title);        tvGroupTitle.setTypeface(null, Typeface.BolD);        tvGroupTitle.setText(headerTitle);        return convertVIEw;    }    @OverrIDe    public boolean hasStableIDs() {        return false;    }    @OverrIDe    public boolean isChildSelectable(int groupposition, int childposition) {        return true;    }}

然后我这样称呼它:

filterlistadapter = new expandablelistadapter(this.getActivity(), filterheaderList, filterOptionsMap);        // setting List adapter        expListVIEw.setAdapter(filterlistadapter);        filterlistadapter.notifyDataSetChanged();

有理由以这种方式组织数据,我宁愿不介入.我可以说HashMap“filterOptionsMap”是正确的,它没有重复或“filterheaderList”

任何帮助将不胜感激.我找不到有类似问题的人,而且我一直在敲打键盘.

谢谢.

附:
您还需要点击组标题两次以使其折叠,但一旦打开.我不知道它是否是相关的或预期的行为,但我希望只需轻轻一点即可将其打开或关闭.奖金积分也可以提供帮助.

根据要求,这里有一些与HashMap相关的其他代码:

private voID prepareFilterListData(ArrayList<String> headerList, JsONObject[] categoryList, JsONObject[] sellerList, JsONObject[] typeList) {    filterheaderArrayList = headerList;    filterOptionsMap = new HashMap<String, ArrayList<JsONObject>>();    // Adding child data    ArrayList<JsONObject> categorIEs = new ArrayList<JsONObject>();    if (categoryList != null && categoryList.length > 0) {        for (JsONObject category : categoryList) {            categorIEs.add(category);        }    }    ArrayList<JsONObject> sellers = new ArrayList<JsONObject>();    if (sellerList != null && sellerList.length > 0) {        for (JsONObject seller : sellerList) {            sellers.add(seller);        }    }    ArrayList<JsONObject> types = new ArrayList<JsONObject>();    if (typeList != null && typeList.length > 0) {        for (JsONObject type : typeList) {            types.add(type);        }    }    filterOptionsMap.put(filterheaderArrayList.get(0), categorIEs);    filterOptionsMap.put(filterheaderArrayList.get(1), sellers);    filterOptionsMap.put(filterheaderArrayList.get(2), types);}    filterheaderList = Directory.getFilterOptions();    filtercategoryList = Directory.getFilterCategorIEs();    filterSellerList = Directory.getFilterSellers();    filterTypeList = Directory.getFilterTypes();    // Forms data structures from given input    if (filterheaderList != null && filtercategoryList != null && filterSellerList != null && filterTypeList != null) {        prepareFilterListData(filterheaderList, filtercategoryList, filterSellerList, filterTypeList);private JsONObject[] getFilterTypes(JsONObject productSearchSettings, String filterTypes) {    JsONArray typesObj;    JsONObject[] types;    try {        typesObj = productSearchSettings.optJsONArray(filterTypes);        if (typesObj != null) {            types = new JsONObject[typesObj.length()];            for (int i = 0; i < typesObj.length(); i++) {                String key = "type" + String.valueOf(i);                String val = (String) typesObj.get(i).toString();                types[i] = new JsONObject().put(key, val);            }            return types;        } else {            return null;        }    } catch (JsONException e) {        // Todo auto-generated catch block        e.printstacktrace();    }    return null;}private JsONObject[] getFilterSellers(JsONObject productSearchSettings, String filterSellers) {    JsONObject sellersObj = null;    JsONObject[] sellers;    try {        sellersObj = productSearchSettings.getJsONObject(filterSellers);        if (sellersObj != null) {            sellers = new JsONObject[sellersObj.length()];            Iterator<?> it = sellersObj.keys();            int i = 0;            while (it.hasNext()) {                String key = (String) String.valueOf(it.next().toString());                String val = sellersObj.getString(key);                sellers[i] = new JsONObject().put(key, val);                i++;            }            return sellers;        } else {            return null;        }    } catch (JsONException e) {        // Todo auto-generated catch block        e.printstacktrace();    }    return null;}private JsONObject[] getFilterCategorIEs(JsONObject productSearchSettings, String filterCategorIEs) {    JsONObject categorIEsObj = null;    JsONObject[] categorIEs;    try {        categorIEsObj = productSearchSettings.getJsONObject(filterCategorIEs);        if (categorIEsObj != null) {            categorIEs = new JsONObject[categorIEsObj.length()];            Iterator<?> it = categorIEsObj.keys();            int i = 0;            while (it.hasNext()) {                String key = (String) String.valueOf(it.next().toString());                String val = categorIEsObj.getString(key);                categorIEs[i] = new JsONObject().put(key, val);                i++;            }            return categorIEs;        } else {            return null;        }    } catch (JsONException e) {        // Todo auto-generated catch block        e.printstacktrace();    }    return null;}

如前所述,但是进入适配器的hashmap是正确的.我通过调试验证了.

解决方法:

我终于找到了.我非常感谢您的反馈和帮助.

在该组的单击事件中,我没有返回true表示已处理单击.我正在使用click事件来切换扩展.

我不知道为什么会导致重复,并且还需要两次单击才能关闭该组,但是为该组上的click事件切换该返回会产生重大影响.

总结

以上是内存溢出为你收集整理的java – Android ExpandableListView填充两次全部内容,希望文章能够帮你解决java – Android ExpandableListView填充两次所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1116098.html

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

发表评论

登录后才能评论

评论列表(0条)

保存