0

我需要使用屏幕尺寸的值,所以我想像这样为我的 gridview 设置一个适配器

    @Override
public void onLayoutChange(View view, int left, int top, int right,
        int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
    Log.d("LayoutTest","left="+left+", top="+top+", right="+right+", bottom="+bottom);
    gridview.setAdapter(new GridImageAdapter(this,bottom));

}

这在我的网格视图中没有显示任何内容,但如果我移动这条线

gridview.setAdapter(new GridImageAdapter(this,1000));

对它起作用的 onCreate 方法我不明白为什么它在 onLayoutChange 中不起作用

4

1 回答 1

2

当 gridview setAdapter 它会请求 Layout 来布局它的孩子。当 gridview 布局(其子项)时,再次调用 onLayoutChange 函数。

参考资料: http: //grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/android/view/View.java#View.layout%28int%2Cint% 2Cint%2Cint%29

并再次跳入 gridView.setAdapter。

第一次跳转 setAdapter 它按照这个循环进行,但是第二次我不知道为什么它没有发生。

但是,如果发生这种情况,那么您的代码将成为无限循环。所以它没有在 setAdapter 和 gridView setAdapter removed_All_Children_InLayout 之后重新布局 - > gridview 什么都不显示。

回到您的问题,我认为如果您需要屏幕尺寸,您应该使用 getResource ().GetDisplayMetrics(dm) 和 dm.widthPixels 或 dm.heightPixels 或其他方式来获取屏幕尺寸。不要像你使用的那样使用,因为它可能有很多错误。

但是如果你仍然想使用 OnLayoutChange,你应该添加一个小代码,比如: if(gridview.getAdapter() == null) gridView.setAdapter(new GridImageAdapter(this,bottom)); (但我不推荐:))

于 2013-08-15T05:38:59.240 回答