Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ExpandableListView getChildView造成数据混乱_Android_Expandablelistview_Android Viewholder - Fatal编程技术网

Android ExpandableListView getChildView造成数据混乱

Android ExpandableListView getChildView造成数据混乱,android,expandablelistview,android-viewholder,Android,Expandablelistview,Android Viewholder,我试图学习Android和java,但在ExpandableListView方面遇到了困难 我正在尝试制作一个Expandablelistview,它下面有许多EditText和TextView。我可以有1到20个组,每个组有3个编辑文本和一个文本视图 我希望在启动时从数据库填充数据,并在用户修改数据时将其保存回数据库。我试图这么做,但数据似乎到处都是。简单测试: 添加3个组,每个组1个孩子 向每个编辑文本添加数据 折叠所有组并将它们从最后一个扩展到第一个 ->结果是第1组和第2组的数据与最

我试图学习Android和java,但在ExpandableListView方面遇到了困难

我正在尝试制作一个Expandablelistview,它下面有许多EditText和TextView。我可以有1到20个组,每个组有3个编辑文本和一个文本视图

我希望在启动时从数据库填充数据,并在用户修改数据时将其保存回数据库。我试图这么做,但数据似乎到处都是。简单测试:

  • 添加3个组,每个组1个孩子
  • 向每个编辑文本添加数据
  • 折叠所有组并将它们从最后一个扩展到第一个
->结果是第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;
}
这是我的取景器:

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

我没有添加数据库调用,因为它们是无关的。我现在连这个都不能用

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

您没有在
else
语句中设置视图,你必须设定好,很好。我在做你刚才建议的事,然后再继续。我之所以选择这种方式是因为我根本无法让TextWatcher正常工作,我在某个地方读到这样做会更好,但显然我无法让它正常工作。我将再试一次并更新我的进度。如果不是这样的话,我可能需要你们在TextWatcher上的帮助。