自定义ListView重复自己

时间:2014-03-19 17:08:02

标签: android android-listview adapter

这是我的getView()方法:

public View getView(final int pos, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        int rowType = getItemViewType(pos);

        if (convertView == null) {

            switch (rowType) {


            case 1:

                convertView = mInflater.inflate(
                        R.layout.single_class_select_row_header, parent, false);
                holder = new ViewHolder();

                holder.label = (TextView) convertView
                        .findViewById(R.id.tvSingleClassSelectHeader);
                convertView.setTag(holder);
                break;
            case 2:

                final int newPos = getRealPosition(pos);
                convertView = mInflater.inflate(
                        R.layout.single_class_select_row, parent, false);
                holder = new ViewHolder();

                holder.checkBox = (CheckBox) convertView
                        .findViewById(R.id.chkSession);
                holder.mainLayout = (LinearLayout) convertView
                        .findViewById(R.id.llSingleClassLayout);

                holder.phase = (TextView) convertView.findViewById(R.id.phase);
                holder.class_info = (TextView) convertView
                        .findViewById(R.id.class_info);
                holder.phase.setText(getListObject(pos).phase);
                holder.class_info.setText(getListObject(pos).info);
                convertView.setTag(holder);

                holder.checkBox.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                            // edit out 
                        }
                    }
                });

                holder.mainLayout.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                                             // edit out  
                                         }
                    }
                });

                holder.phase.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                                                   // edit out
                        }
                    }
                });


                break;
            }

        } else {
            holder = (ViewHolder) convertView.getTag();
        }



        return convertView;
    }

谁能明白为什么?我查看了其他示例,但由于我在列表中间的标题覆盖了getItemViewType(),因此我没有任何示例符合我的情况,因为我的处理方式不同。

我似乎应该将setOnClickListner放在if-block下方,但我的holder变量问题没有被初始化,而其他实例需要它它是final

1 个答案:

答案 0 :(得分:2)

您需要设置if块的 以外的数据(文本或其他信息),其中convertViewnull convertView }}。否则,您只会在null为{{1}}时设置数据,并且由于此视图将被回收,您最终将获得之前设置的相同信息。