在Android中滚动时刷新Listview Cell?

时间:2012-12-05 07:11:32

标签: android listview

我在每一行都有一个带有切换按钮的Listview。滚动列表视图得到了刷新,因此每次滚动时,值切换按钮也会被更改?

我希望在滚动之前将Toggle按钮值保持为用户设置的ON / OFF值?

5 个答案:

答案 0 :(得分:1)

On Scrolling the Listview got refreshed,

这是ListView的违反行为。它实际上没有刷新,ListView只有内存中可见(有一些偏移)Views。并摧毁他人。

I want to keep that Toggle button value

您需要跟踪切换按钮的状态。像Local arrayList中的store一样。并在适配器的togglebutton方法中更新getView状态。

答案 1 :(得分:0)

切换按钮时,还应刷新适配器的数据源。例如,如果您使用arraylist填充适配器,则在按钮上切换时,您必须更新您的arraylist。

如果您阻止回收行,也可以防止刷新列表视图。

答案 2 :(得分:0)

您应该将ListView设置为使用setChoiceMode()(使用CHOICE_MODE_SINGLECHOICE_MODE_MULTIPLE)并使用实现Checkable的自定义行布局,这样ListView将记住已切换的行对你而言。

我详细介绍了如何在CheckedTextView checkmark in ListView row not showing up之前创建自定义Checkable布局。 (这并不难,这种方法允许您使用任何内置适配器而无需扩展它。)

答案 3 :(得分:0)

在getView函数的第一行中尝试这个

    if (convertView != null) return convertView;

答案 4 :(得分:-1)

使用以下内容:这将处理您的listView。

View vi = convertView;

if (convertView == null) {
            vi = inflater.inflate(R.layout.layoutFile, null);
            holder = new ViewHolder();
            holder.layout1 = (LinearLayout) vi
                    .findViewById(R.id.layoutcourse);
            holder.text = (TextView) vi.findViewById(R.id.text);
            holder.status = (ImageView) vi.findViewById(R.id.img_status);
            holder.date = (TextView) vi.findViewById(R.id.date1);
            holder.toggleButton = (ImageView) vi
                    .findViewById(R.id.toggleButton);
            vi.setTag(holder);
        } else

            holder = (ViewHolder) vi.getTag();