简体   繁体   English

自定义ListView重复自己

[英]Custom ListView Repeating Itself

Here is my getView() method: 这是我的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;
    }

Can anyone see why? 谁能明白为什么? I have looked at other examples, but because I am overriding getItemViewType() because of headers in the middle of the list, no examples match my circumstances since I am doing things differently. 我已经看了其他的例子,但是由于我在列表中间的标题覆盖了getItemViewType()所以没有任何例子符合我的情况,因为我的处理方式不同。

It seems that I should put the setOnClickListner 's below the if-block , but the I have problem with my holder variable not being initialized while other instances of it need it to be final . 看来我应该把setOnClickListner放在if-block下面,但是我的holder变量没有初始化的问题,而其他实例需要它是final

You need to set the data(text or what other piece of information you have) outside of the if block where you test the convertView for being null . 您需要将外部设定的数据(文本或什么的,你有其他信息块) if块,你测试convertView为是null Otherwise you'll set the data only when convertView is null and as this view will get recycled you'll end up with the same piece of information that was previously set. 否则,只有当convertViewnull时才会设置数据,并且当此视图将被回收时,您将最终得到之前设置的相同信息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM