我有ListView
,显示要购买的不同商品。如果用户选择了某个项目,那么我将“Buy
”和“Add
”按钮设置为可见。当用户点击任何其他项目时,之前选择的“Visibility
和”Buy
“的Add
设置为Gone
,同时我设置Visibility
已将Button
的所选列表项再次发送到Visible
。
但是,当我滚动listview 2-3次时,首先选择的列表项不会隐藏(将可见性设置为Gone
)“Buy
”和“Add
”{{ 1}}秒。它与回收视图有关吗?我将在这里显示代码:
Button
我在ButtonVisibilityFunction(View v) {
if(mBuyButton!=null && mAddButton !=null) {
mBuyButton.setVisibility(View.Gone);
mAddButton .setVisibility(View.Gone);
}
mBuyButton = (ImageButton) v.findViewById(R.id.Buy);
mAddButton = (ImageButton) v.findViewById(R.id.Add);
mBuyButton.setVisibility(View.Visible);
mAddButton .setVisibility(View.Visible);
}
....
答案 0 :(得分:2)
这是众所周知的“问题”。实际上,您需要了解listview的工作原理。 为了节省内存,只有您在屏幕上显示的元素才是实时的。当你滚动回来时,其他的经常被破坏和重新创建。
这就是为什么一旦你让你的元素变得不可见,它们再次可见,因为它们被重新创建。
因此,为了让它们再次隐身,每次listview重新创建视图时都需要这样做。
要做到这一点,你需要覆盖getView方法并设置隐藏所需的元素。
答案 1 :(得分:0)
我解决了这个问题:mAdapter.notifySetDataChanged(); !