我正在使用带有自定义 ArrayAdapter 的 ListView。列表是无限滚动的推文。列表的更新从顶部插入。我想获得作为 Twitter 应用程序的效果。我不是在谈论“滚动更新”,而是在更新后保持位置。
我刚刚实现了一些以这种方式工作的代码。这里是:
// get the position of the first visible tweet.
// pausedCounter traces the number of tweets in the waiting line
final int idx = listView.getFirstVisiblePosition() + pausedCounter;
View first = listView.getChildAt(0);
int position = 0;
if (first != null)
position = first.getTop();
// here I update the listView with the new elements
for (Tweet[] tweets1 : pausedTweets)
super.updateTweets(tweets1);
final int finalPosition = position;
// this code maintain the position
listView.post(new Runnable() {
@Override
public void run() {
listView.setSelectionFromTop(idx, finalPosition);
}
});
这段代码的问题是,listView 会立即转到列表的第一个元素,然后启动setSelectionFromTop并转到正确的位置。
这种“闪烁”很烦人,我想将其删除。