Android ListView不返回子视图的坐标值,直到屏幕关闭然后打开

Android ListView不返回子视图的坐标值,直到屏幕关闭然后打开,android,android-listview,Android,Android Listview,我有一个listview,我在onCreate()方法中设置了一个适配器,如下所示 SongListAdapter songListAdapter = new SongListAdapter(getApplicationContext(),list); all_songs.setAdapter(songListAdapter); 这里的SongListAdapter是自定义适配器。所有歌曲都是列表视图 之后,我尝试通过以下onCreate()中的方法获取

我有一个listview,我在onCreate()方法中设置了一个适配器,如下所示

SongListAdapter songListAdapter 
                   = new SongListAdapter(getApplicationContext(),list);
all_songs.setAdapter(songListAdapter);
这里的SongListAdapter是自定义适配器。所有歌曲都是列表视图

之后,我尝试通过以下onCreate()中的方法获取列表中膨胀的每个子视图的坐标,但每次都将所有坐标设为零。然而,如果我在onResume()中也这样做,我会正确地获取坐标,但要使用它们,我首先必须关闭屏幕,然后再次打开屏幕,然后获取坐标日志。请帮助我需要这些文件,而不必关闭然后打开屏幕

int[] temp = new int[2];
float x,y,h,w;
View singleview=all_songs.getChildAt(i);
singleview.getLocationOnScreen(temp);
x = temp[0];
y = temp[1];
w =singleview.getWidth();
h = singleview.getHeight();
Log.d("faiz",String.valueOf(x)+" "+ String.valueOf(x+w)+"     "+String.valueOf(y)+" "+String.valueOf(y+h)+" "+String.valueOf(i));

onCreate中的视图布局不完整;您应该在onCreate中添加onGlobalLayoutListener以侦听以下内容:

final ViewTreeObserver vto = all_songs.getViewTreeObserver();
if(vto.isAlive()){
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            // get coordinates
            // remove the listener
            vto.removeOnGlobalLayoutListener(this);
        } 
    });
}

什么是零?
l
在哪里填写?此代码位于何处?此外,永远不要使用字母“l”作为变量名。特别是如果这个变量实际上与数字有关。它看起来像一个“1”。我代表listviewZero中的第i项与SingleView相同非常感谢Justin Powell它为我工作。只需要添加一个小检查:在调用vto.removeOnGlobalLayoutListener(this)之前添加:if(vto.isAlive());