2017-04-26 77 views
0

我想学习Android和Java,并且遇到了与ExpandableListViews的困难。Android ExpandableListView getChildView使数据混乱

我正在试着制作一个Expandablelistview,它下面有一些editTexts和textViews。我可以有1到20个组,每组有3个editText和一个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; 
} 

我没加的数据库调用,因为他们是不相关的。我甚至无法立即开始工作。

+0

你没有在'else'语句中设置你的视图,你必须设置它。 –

回答

1

我想张贴此评论,但我没有足够的声誉。无论如何,我会尽量不检查convertView是否为null,但我会一直重新创建它,因为每当你展开或关闭一个组时,列表就会被重新创建,也许它会重复使用每个单元的相同视图,这可能是你在不同的行中拥有相同的数据。

+0

伟大的一点。在做这件事之前,我正在做你刚刚提出的建议。之所以选择这种方式,是因为我无法使TextWatcher工作,并且我在某处读到这会是更好的方式,但显然我无法使其工作。我会再试一次并更新我的进度。否则,我可能不得不在TextWatcher上获得帮助。 – Arn