我在每一行都有一个带有切换按钮的Listview。滚动列表视图得到了刷新,因此每次滚动时,值切换按钮也会被更改?
我希望在滚动之前将Toggle按钮值保持为用户设置的ON / OFF值?
答案 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_SINGLE
或CHOICE_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();