Android ExpandableListView getChildView弄乱了数据

时间:2017-04-26 06:35:07

标签: android expandablelistview android-viewholder

我正在尝试学习Android和java,并且我在使用ExpandableListViews时遇到了困难。

我正在尝试制作一个Expandablelistview,其下面有许多editTexts和textViews。我可以有1到20个组,每组有3个editTexts和一个textView。

我想在启动时填充数据库中的数据,并在用户修改数据时将其保存回来。我试图这样做,但数据似乎是全部的。简单测试:

  • 添加3组,每组1个孩子
  • 向每个editText添加数据
  • 折叠所有群组并将其最后一个展开到第一个

- >结果是第1组和第2组将具有与最后一组相同的数据!这让我发疯了!有人可以告诉我,我做错了吗?

这是我的getChildView,非常简单。

public View getChildView(final int groupPosition, final int childPosition,
                         boolean isLastChild, View convertView, ViewGroup parent) {


    if (convertView == null) {
        ViewHolder holder = new ViewHolder();
        Log.i("Main", "Creating new viewHolder for " + groupPosition+childPosition);
        convertView = minflater.inflate(R.layout.childrow, null);

        holder.text1 = (EditText) convertView.findViewById(R.id.rpsinSet);
        holder.text2 = (EditText) convertView.findViewById(R.id.wtForSet);
        holder.text3 = (EditText) convertView.findViewById(R.id.rstForSet);
        holder.No    = (TextView) convertView.findViewById(R.id.NoTextView);

        holder.No.setText("Set " + (childPosition + 1));
        holder.text1.setText(""+Sets.get(groupPosition).get(childPosition).getRps());
        holder.text2.setText(""+Sets.get(groupPosition).get(childPosition).getWt());
        holder.text3.setText(""+Sets.get(groupPosition).get(childPosition).getRst());


        convertView.setTag(holder);
    } else {
        Log.i("Main", "Recovering viewHolder for " + groupPosition+childPosition);
        ViewHolder holder = (ViewHolder) convertView.getTag();
        holder.text1   = (EditText) convertView.findViewById(R.id.rpsinSet);
        holder.text2   = (EditText) convertView.findViewById(R.id.wtForSet);
        holder.text3   = (EditText) convertView.findViewById(R.id.rstForSet);
        holder.No      = (TextView) convertView.findViewById(R.id.NoTextView);
    }
    return convertView;
}

这是我的ViewHolder:

static class ViewHolder {
    EditText text1;
    EditText text2;
    EditText text3;
    TextView No;
}

我没有添加数据库调用,因为它们无关紧要。我现在甚至无法让它工作。

1 个答案:

答案 0 :(得分:1)

我想将此作为评论发布,但我没有足够的声誉。无论如何,我会尝试不检查convertView是否为空,但我总是会重新创建它,因为每次展开或关闭一个组时,列表都会被重新创建,也许它会重复使用相同的视图对于每个单元格而言,这可能是您在不同行中拥有相同数据的原因。