Android 自定义ListView重复自身

Android 自定义ListView重复自身,android,android-listview,adapter,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) {

下面是我的
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;
    }
有人知道为什么吗?我已经看过了其他的例子,但是因为我在重写<代码> GeTimeVIEW()/代码>,因为列表中间的头,没有例子与我的情况相匹配,因为我做事的方式不同。


似乎我应该把
setOnClickListner
放在
if块的下面,但是我的
holder
变量没有初始化,而它的其他实例需要它是
final
您需要设置数据(文本或您拥有的其他信息)在测试
convertView
是否为
null
if
块之外。否则,只有当
convertView
null
时,您才会设置数据,并且由于此视图将被回收,您将得到与以前设置的相同的信息。

您需要在测试
convertView
if
块之外设置任何数据,否则您将设置数据只有当该视图为空时(并在视图回收时继续仅获取该数据)。@Luksprog就是这样。我只是需要改变一些事情,让它发挥作用,让所有的
持有者
变量都感到高兴。我现在明白了。您想回收UI视图,而不是数据!(如果愿意,您可以标记为答案)