【发布时间】:2012-06-12 06:44:59
【问题描述】:
这是我第一次在这里发帖,我是一个愚蠢的新手,所以我希望那里的人能帮助我并原谅我的无知。
我有一个 ListView,其中填充了一个 ArrayAdapter。当我滚动或单击时,我希望将所选项目或最接近垂直中心的项目强制到屏幕的确切垂直中心。如果我调用 listView.setSelection(int position) 它会在屏幕顶部对齐所选位置,所以我需要使用 listView.setSelectionFromTop(position, offset) 代替。为了找到我的偏移量,我从 ListView 的一半高度中取了一半的 View 高度。
因此,我可以在 OnItemClick 或 OnScrollStateChanged 中轻松地将我的项目垂直居中,使用以下内容:
int x = listView.getHeight();
int y = listView.getChildAt(0).getHeight();
listView.setSelectionFromTop(myPosition, x/2 - y/2);
这一切都很好。我的问题是初始 ListView 设置。我希望在活动开始时将项目居中,但我不能,因为我从以下位置获得 NullPointerException:
int y = listView.getChildAt(0).getHeight();
我知道这是因为 ListView 尚未渲染,所以当我从 OnCreate() 或 OnResume() 调用它时它没有子视图。
所以我的问题很简单:如何强制我的 ListView 在启动时呈现,以便获得所需的高度值?或者,还有其他方法可以在 ListView 中垂直居中项目吗?
提前感谢您的帮助!
【问题讨论】:
-
我认为这对你有用。 stackoverflow.com/questions/5305632/…