gpt4 book ai didi

Android:检测 ListView 是否有滚动条(设置新数据后)

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:24 25 4
gpt4 key购买 nike

我有一个链接到 ListView 的 ArrayAdapter。

mListView.setAdapter(mArrayAdapter);

每当我将 ArrayList 数据重置为 ArrayAdapter 时:

mArrayAdapter.clear();
mArrayAdapter.addAll(mArrayList);
mArrayAdapter.notifyDataSetChanged()

ListView 得到正确更新

但是,如果在上面三行之后,我调用我的自定义方法 mListView.hasScrollbar() 来检测 ListView 是否有滚动条,我得到一个 null lastVisibleItem:

public boolean hasScrollbar() {
View lastVisibleItem = (View) getChildAt(getChildCount() - 1);
if (lastVisibleItem.getBottom()>=getHeight()) {
return true;
}
return false;
}

是不是说明listview还在刷新?

我的主要问题是:
如何在用新数据重置适配器后测试 ListView 是否有滚动条?

感谢您的帮助!

最佳答案

使用 getLastVisiblePosition/getFirstVisiblePosition 是检测您是否在 ListView 中滚动的有效方法(只要您将其与 getCount() 进行比较并进行计算)。您已经猜到的问题是您正试图检查不同步。为了在适配器已经填满您的列表数据并更新更改时同步您的查询,您需要向列表发出发布请求,这会将请求堆叠到适配器的消息队列中。

yourAdapter.notifyDataSetChanged();
yourAdapter.getListView().post(new Runnable() {
@Override public void run() {
//your code here
}
});

当然,请确保在 notifySetDataChanged() 之后调用它。因为您希望列表在检查之前更新。

关于Android:检测 ListView 是否有滚动条(设置新数据后),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20450765/

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