在notifyDataSetChanged不能在android中工作之后的smoothScrollToPosition

时间:2011-08-04 13:48:14

标签: android listview

我有一个自定义适配器用于ListView设置并且正常工作。在按钮上单击基础数据中的某些内容,因此需要notifyDataSetChanged来刷新ListView。精细。但我也希望ListView滚动到发生更改的行。为此,我在notifyDataSetChanged之后立即调用smoothScrollToPosition。那是行不通的。

如果我不调用notifyDataSetChanged,则滚动工作,因此notify阻止滚动。我可能正在与将来处理的事件进行斗争。任何人都可以给我一个关于出了什么问题的指针吗?

2 个答案:

答案 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