-2

我有一个带有文本视图和开关的列表视图。列表视图位于设置页面片段内。单击开关时,某些设置会更改(开/关)。它对我来说很好。考虑一种情况,如果我更改了第三个开关状态从 ON 到 OFF 并滚动列表视图。在第三个列表元素在视图内移动并将列表返回到其原始可见位置后,第三个开关变为 ON 状态。但是,第三个设置以编程方式变为 OFF 状态,但它显示为ON。如果我将包含列表视图的片段更改为另一个(主页)并返回设置屏幕,那么我可以看到第三个开关处于关闭状态。这意味着列表视图项目返回到其加载状态状态如果它在滚动时消失并返回。

4

1 回答 1

1

ListView 元素由适配器中的 getView() 函数查看,并在它们出现在屏幕的可见部分时重新生成。您的开关可能以编程方式设置为 OFF,是的,但是当它再次出现在屏幕上时,getView() 函数再次工作并显示为 ON。所以你要做的是,在你的getView()中,你可以检查它的状态是ON还是OFF,然后使用switch自己的方法进行相应的显示。

这是一个例子。getView() 中的 position 参数保存列表中的索引。您可以创建保存开关状态的布尔值列表。让 isToggled 成为列表,switchBox 成为您的切换按钮。然后您可以在 getView() 方法中添加以下内容;

if( isToggled(position) ){              
    switchBox.setChecked(true);
}
于 2014-09-01T07:16:25.750 回答