0

画面サイズの値を使用する必要があるため、このようにグリッドビューのアダプターを設定しようとしています

    @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 にジャンプします。

最初の jump setAdapter はこのサイクルに従って進みますが、2 回目はなぜそれが起こっていないのかわかりません。

ただし、それが発生すると、コードは無限ループになります。そのため、setAdapter の後に gridView setAdapter removed_All_Children_InLayout とともに再レイアウトしませんでした - > gridview には何も表示されません。

問題に戻ると、画面サイズが必要な場合は、 getResource ().GetDisplayMetrics(dm) と dm.widthPixels または dm.heightPixels または別の方法で画面サイズを取得する必要があると思います。多くのバグが発生する可能性があるため、使用するように使用しないでください。

ただし、それでも OnLayoutChange を使用したい場合は、次のような小さなコードを追加する必要があります。(しかし、私はお勧めしません:))

于 2013-08-15T05:38:59.240 に答える