我有一个带有textview和switch的listview。列表视图位于设置页面片段内。点击swiches,一些设置被更改(ON / OFF)。它对我来说很好。考虑到一种情况,如果我改变了第三个开关状态从ON到OFF,我滚动listview。第三个列表元素在视图内移动后我将列表返回到原来的可见位置,第三个开关变为ON状态。但是,第三个设置变为OFF状态编程,但它显示为ON。如果我用另一个(Home)更改了包含listview的片段,然后我返回到设置屏幕,然后我可以看到第三个开关处于OFF状态。这意味着列表视图项返回如果它在滚动并返回时消失,则为其加载状态。
答案 0 :(得分:1)
ListView元素由适配器中的getView()函数查看,当它们出现在屏幕的可见部分时会重新生成。您的开关可能以编程方式设置为OFF,是的,但当它再次出现在屏幕上时,getView()函数再次工作,它显示为ON。所以你需要做的是,在你的getView()中,你可以检查它的状态,无论它是ON还是OFF,然后使用switch自己的方法相应地显示它。
这是一个例子。 getView()中的position参数保存列表中的索引。您可以创建一个包含交换机状态的布尔值列表。让isToggled成为列表,将switchBox作为切换按钮。然后,您可以在getView()方法中添加以下内容;
if( isToggled(position) ){
switchBox.setChecked(true);
}