Android可扩展列表组textView随机替换

时间:2014-10-08 09:20:22

标签: android expandablelistview expandablelistadapter

我遇到了可扩展列表的问题 - 这是第一次正确绘制列表组,(相应的textViews文本被替换,例如 3 of 9 )但是当点击任何组时替换另一组(随机)的textViews而不是未接触的 mm

correct

faulty

应该采取什么措施来阻止这种情况?

这是适配器类:

public class InterestListAdapter extends BaseExpandableListAdapter
{
...
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)
{
    if (convertView == null)
    {
        convertView = LayoutInflater.from(_context).inflate(R.layout.activity_interest_list_group, parent, false);
    }

    try
    {
        HashMap<String, String> interest = this._listDataHeader.get(String.valueOf(groupPosition));

        String interestId = interest.get("interest_id");
        String interestName = interest.get("interest_name");

        JSONObject interestsTree = new JSONObject(library.loadString(_context, "userInterestsTree"));

        TextView listGroupName = (TextView) convertView.findViewById(R.id.interest_list_group_name);
        listGroupName.setText(interestName);

        if (this._listDataChild.containsKey(String.valueOf(interestId)))
        {
            String subinterestAll = String.valueOf(this._listDataChild.get(String.valueOf(interestId)).size());

            if (interestsTree.has(interestId))
            {
                String subinterestChecked = interestsTree.getString(interestId);
                TextView subinterestText = (TextView) convertView.findViewById(R.id.interest_list_group_selected);
                subinterestText.setText(subinterestChecked + " of " + subinterestAll);
            }
        }
    }
    catch (Exception e)
    {
        Log.e("error", Log.getStackTraceString(e));
    }

    return convertView;
}
}

1 个答案:

答案 0 :(得分:1)

我很确定,你的内存管理存在问题。当您展开列表时,某些单元格将从屏幕隐藏。之后,当您滚动它时,它们必须重新生成。 Android OS,为了节省内存,不会从头开始生成它们,而是使用相同的内存区域,用于隐藏单元格。

看起来subinterestText是一个有问题的领域。只有当这两个if都为真时才设置它:

if (this._listDataChild.containsKey(String.valueOf(interestId)))

if (interestsTree.has(interestId))

如果其中一个为假,则不会设置subinterestText变量。因此,结果将使用以前隐藏字段的值 - 在您的情况下 - 2的2。

要修复它 - 始终在getGroupView方法中设置单元格的所有值。