这是我第一次在这里发帖,我是一个愚蠢的新手,所以我希望有人能帮助我并原谅我的无知。
我有一个用 ArrayAdapter 填充的 ListView。当我滚动或单击时,我希望将所选项目或最接近垂直中心的项目强制到屏幕的确切垂直中心。如果我调用 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 设置。我希望一个项目在 Activity 开始时居中,但我不能,因为我从以下位置获得 NullPointerException:
int y = listView.getChildAt(0).getHeight();
我理解这是因为 ListView 尚未呈现,所以当我从 OnCreate() 或 OnResume() 调用它时它没有子项。
所以我的问题很简单:如何强制我的 ListView 在启动时呈现,以便获得我需要的高度值?或者,还有其他方法可以在 ListView 中垂直居中项目吗?
在此先感谢您的帮助!
最佳答案
int y = listView.getChildAt(0).getHeight();
我知道这是因为 ListView 尚未呈现,所以它没有子项,当我从 onCreate()
调用它时或 onResume()
.
你应该在onScroll
中调用它.
listView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
//Write your logic here
int y = listView.getChildAt(0).getHeight();
}
});
关于Android ListView : Can not center items on start up, 由于空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10991675/