我有一个expandableList适配器工作得很好,但有些令我困惑的事情。在每个子列表上,我有2个按钮和一个textview。我想说的是,当我单击一个按钮(+)时,textview编号会上升,当我单击另一个按钮( - )时,textview编号会下降。
public View getChildView(final int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
final String childText = (String) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_item, null);
}
final TextView txtListChild = (TextView) convertView
.findViewById(R.id.lblListItem);
Button btnMinus = (Button) convertView
.findViewById(R.id.btnMinus);
btnMinus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LinearLayout ll = (LinearLayout) v.getParent();
TextView tv1 = (TextView) ll.getChildAt(1);
String Count = tv1.getText().toString();
int num = Integer.parseInt(Count);
num = num - 1;
tv1.setText(Integer.toString(num));
}
所以上面的代码按照我的预期工作,单击按钮,textview下降一个,我们都很好。
但这里是我感到困惑的地方。如果我打开列表的另一部分并查看另一个子列表,则该列表中的一个TextView也已更改!因此,简单地单击一个子项中的按钮不仅会影响其旁边的文本视图,还会影响完全不同的标题中的文本视图。
答案 0 :(得分:1)
我认为你不知道视图回收机制。你可以在这里读到它: How ListView's recycling mechanism works
基本上,当您滚动ListView(或ExpandableListView)时,刚从顶部屏幕下移的视图将被重用,以创建需要在底部显示的视图。