gpt4 book ai didi

Android ListView setSelectionFromTop 不工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:12 25 4
gpt4 key购买 nike

我创建了一个动态 ListView,其中的对象是从顶部添加的。

当用户按下按钮时,listView 会根据数组的内容进行更新,然后在自定义数组适配器上调用 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 的子项数量在这段代码的运行期间没有改变,因此它会在我调用 后更新 listView 的大小 setSelectionFromTop。这可能是问题所在吗?

最佳答案

诀窍是这样的:

        listView.post(new Runnable() {
@Override
public void run() {
listView.setSelectionFromTop(idx, finalPosition);
}
});

使用 post 方法允许在更改位置之前等待 ListView 的更新。

关于Android ListView setSelectionFromTop 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18303467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com