ExpandableListAdapter,带有更改TextView的按钮

时间:2015-03-06 23:37:58

标签: android expandablelistview

我有一个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也已更改!因此,简单地单击一个子项中的按钮不仅会影响其旁边的文本视图,还会影响完全不同的标题中的文本视图。

1 个答案:

答案 0 :(得分:1)

我认为你不知道视图回收机制。你可以在这里读到它: How ListView's recycling mechanism works

基本上,当您滚动ListView(或ExpandableListView)时,刚从顶部屏幕下移的视图将被重用,以创建需要在底部显示的视图。