Android ListView : Can not center items on start up, 由于空指针异常

标签 android android-listview

这是我第一次在这里发帖,我是一个愚蠢的新手,所以我希望有人能帮助我并原谅我的无知。

我有一个用 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/

相关文章:

java - android 使用 java vs linux

android - 当 >= 65[FPS] 时,camera2 API 帧跳过并崩溃

Android 操作栏搜索 : How to filter a list by the property of a list item?

android - 具有多项选择的 ExpandableListView 将所选项目保存到数组中

android - 直通 Intent 过滤器和 Activity

Android:如何配置内核?

android - ListView 在与交互之前不会呈现所有项目

android - 将项目符号添加到 Android 的 ListView

android - 单个 ListView 内的多个 ViewPagers 崩溃

java - Android studio Firebase数据库查询选中值