我在每一行都有一个带有 Toggle Button 的 Listview。在滚动 Listview 时会刷新,因此每次滚动时 Toggle Button 的值也会发生变化?
我想在滚动之前将切换按钮的值保持为用户设置的 ON/OFF 吗?
On Scrolling the Listview got refreshed,
这是ListView
. 它实际上没有刷新,内存中ListView
只有可见的(有一些偏移量)Views
。并摧毁他人。
I want to keep that Toggle button value
您需要跟踪切换按钮的状态。就像存储在Local
arrayList 中一样。并更新适配器方法中的togglebutton
状态。getView
在 getView 函数的第一行试试这个
if (convertView != null) return convertView;
Use following: This will take care of your 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();
您应该将 ListView 设置为使用setChoiceMode()
(with CHOICE_MODE_SINGLE
or CHOICE_MODE_MULTIPLE
) 并使用实现 Checkable 的自定义行布局,这样 ListView 将记住哪些行已为您切换。
在 ListView 行中的 CheckedTextView 复选标记未显示之前,我详细介绍了如何创建自定义 Checkable 布局。(这并不难,这种方法允许您使用任何内置适配器而无需扩展它。)
当您切换按钮时,您还应该刷新适配器的数据源。例如,如果您使用arraylist 来填充适配器,则在按钮上切换时,您必须更新您的arraylist。
如果防止行回收,也可以防止刷新列表视图。