onLayoutChange中的setAdapter

时间:2013-08-15 00:13:00

标签: android

我需要使用屏幕大小的值,所以我正在尝试为我的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中不起作用

1 个答案:

答案 0 :(得分: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之后没有重新布局remove_All_Children_InLayout - > gridview什么都没显示。

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

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