我创建了一个动态 ListView,其中从顶部添加对象。
当用户按下按钮时,listView 会根据数组的内容进行更新,然后在自定义 arrayAdapter 上调用 notifyDataSetChanged()。
现在我想在添加时保持列表位置,所以我添加了这段代码:
// pausedCounter trace the number of objects(lines) to add to the listView
int idx = listView.getFirstVisiblePosition() + pausedCounter;
View first = listView.getChildAt(0);
int position = 0;
if (first != null)
position = first.getTop();
// cycle to add the new objects to the listView
for (Tweet[] tweets1 : pausedTweets)
super.updateTweets(tweets1);
listView.setSelectionFromTop(idx, position);
// reset of counter and accumulator
pausedTweets = new ArrayList<Tweet[]>();
pausedCounter = 0;
此代码的行为方式如下:如果 getFirstVisiblePosition 返回 2,并且 pausedCounter 为 5,则更新后列表将设置为新五个元素中的第三个。
我想要的是将列表的第一个可见元素设置为第 8 个。
经过进一步测试,我发现在这段代码的运行过程中,listView 的子项数量没有改变,因此在我调用setSelectionFromTop后它会更新 listView 的大小。可能是这个问题吗?