8

カスタム アダプターを使用した長い GridView があります。GridView が完全に表示され、準備ができていることを確認するにはどうすればよいですか

コード内の問題は次のとおりです。

dashboard = (GridView) findViewById(R.id.dashboard);
dashboard.setAdapter(new ListItemsAdapter(this, allIcons));
AlertSomeItemsOfTheListView();

シーケンスでは、GridView が完全に描画される前に、"AlertSomeItemsOfTheListView" メソッドが実行されます。

4

2 に答える 2

19

ViewTreeObserverのインスタンスを取得し、GridViewそれを使用して などのイベントをリッスンできますonLayout。を使用して取得できViewTreeObserverます。イベントが完全に描画されていることを正確に意味するわけではないため、イベントで十分かどうかはわかりませんが、試してみることはできます。ViewView.getViewTreeObserver()onLayoutView

ここに、onLayoutイベントをリッスンするために使用できるコード サンプルがあります (たとえば、 のonCreateメソッドでそのようなコードを使用できますActivity)。

dashboard.getViewTreeObserver().addOnGlobalLayoutListener(
    new ViewTreeObserver.OnGlobalLayoutListener() {

        @Override
        public void onGlobalLayout() {
            AlertSomeItemsOfTheListView();

            // unregister listener (this is important)
            dashboard.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        }
    });

注:リスナーが呼び出された後は、リスナーを登録解除することが重要です。そうしないと、onLayoutここで必要としないすべてのイベントで呼び出されます (1 回だけ実行する必要があります)。

于 2013-01-02T09:19:33.917 に答える
0

GridView/ListView にアダプターがある場合、表示される項目を表示するときに getView を呼び出します。すべてのビューが表示された後に本当にメソッドを呼び出す必要がある場合は、次のようなことができます....

while(!dashboard.getAdapter().areAllItemsEnabled()){
   //wait
}

AlertSomeItemsOfTheListView();

これがうまくいくとは確信していませんが、http://developer.android.com/reference/android/widget/GridView.html#getAdapter () とhttp://developer.android.com/reference/androidを見てください。 /widget/ListAdapter.html そうなるようにします。

于 2013-01-02T09:12:34.093 に答える