在屏幕关闭然后再打开之前,ListView不会返回子视图的坐标值

时间:2014-12-18 13:17:05

标签: android android-listview

我有一个listview,我在onCreate()方法中设置适配器,就像这样

SongListAdapter songListAdapter 
                   = new SongListAdapter(getApplicationContext(),list);
all_songs.setAdapter(songListAdapter);

这里SongListAdapter是自定义适配器。 and all_songs是Listview。

之后,我尝试通过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));

1 个答案:

答案 0 :(得分:2)

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);
        } 
    });
}