【问题标题】:Custom ListView Repeating Itself自定义 ListView 重复自身
【发布时间】:2014-03-19 17:08:02
【问题描述】:

这是我的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

【问题讨论】:

  • 您需要在您测试convertViewif 块的外部 设置任何数据,否则您将仅在该视图为空时设置数据(并在视图被回收时继续仅获取该数据)。
  • @Luksprog 就是这样。我只需要进行更改以使其正常工作以使所有holder 变量都满意。我现在明白了这个概念。你想回收 UI 视图,而不是数据! (如果您愿意,可以标记为答案)

标签: android android-listview adapter


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    相关资源
    最近更新 更多