Android ExpandableListView getChildView 弄乱数据
Android ExpandableListView getChildView makes a mess of data
我正在尝试学习 Android 和 java,但我 运行 在使用 ExpandableListViews 时遇到困难。
我正在尝试制作一个 Expandablelistview,它下面有许多 editTexts 和 textViews。我可以有 1 到 20 个组,每个组有 3 个 editTexts 和一个 textView。
我想在启动时从数据库中填充数据,并在用户修改数据时将其保存回来。我尝试这样做,但数据似乎到处都是。简单测试:
- 添加 3 组,每组 1 child
- 向每个 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;
}
我没有添加数据库调用,因为它们不相关。我现在甚至无法让它工作。
我想 post 作为评论,但我没有足够的声誉。无论如何,我会尽量不检查 convertView 是否为 null ,但我会始终重新创建它,因为每次您展开或关闭一个组时,列表都会重新创建,并且可能它为每个单元格重复使用相同的视图,这可能是因为你在不同的行中有相同的数据。
我正在尝试学习 Android 和 java,但我 运行 在使用 ExpandableListViews 时遇到困难。
我正在尝试制作一个 Expandablelistview,它下面有许多 editTexts 和 textViews。我可以有 1 到 20 个组,每个组有 3 个 editTexts 和一个 textView。
我想在启动时从数据库中填充数据,并在用户修改数据时将其保存回来。我尝试这样做,但数据似乎到处都是。简单测试:
- 添加 3 组,每组 1 child
- 向每个 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;
}
我没有添加数据库调用,因为它们不相关。我现在甚至无法让它工作。
我想 post 作为评论,但我没有足够的声誉。无论如何,我会尽量不检查 convertView 是否为 null ,但我会始终重新创建它,因为每次您展开或关闭一个组时,列表都会重新创建,并且可能它为每个单元格重复使用相同的视图,这可能是因为你在不同的行中有相同的数据。