我有一个自定义适配器用于ListView设置并且正常工作。在按钮上单击基础数据中的某些内容,因此需要notifyDataSetChanged来刷新ListView。精细。但我也希望ListView滚动到发生更改的行。为此,我在notifyDataSetChanged之后立即调用smoothScrollToPosition。那是行不通的。
如果我不调用notifyDataSetChanged,则滚动工作,因此notify阻止滚动。我可能正在与将来处理的事件进行斗争。任何人都可以给我一个关于出了什么问题的指针吗?
答案 0 :(得分:80)
在致电post()
后,使用notifyDataSetChanged()
方法等待列表完成更新:
adapter.notifyDataSetChanged();
list.post( new Runnable() {
@Override
public void run() {
//call smooth scroll
}
});
答案 1 :(得分:0)
我已经尝试了dmon的示例代码,我发现它并不总是有效。
实际上我找到了另一种执行滚动的方法:
adapter.notifyDataSetChanged();
channelsListView.setSelection(scrollPos); // it works without smoothScrollToPositionFromTop(..) or smoothScrollToPosition() methods call.
在这个答案阅读之后,我找到了使用上述方法的主要想法: https://stackoverflow.com/a/20997828/2133585