Может ли команда запаздывать?

Рейтинг: 0Ответов: 1Опубликовано: 01.10.2014

Не понимаю. В моей главной активности есть сей момент:

    gvMain = (GridView)findViewById(R.id.gvMain);
    gvMain.setNumColumns(4);
    gvMain.setHorizontalSpacing(10);
    gvMain.setVerticalSpacing(10);
    ...
    ResizeDefaultBackgrounds();
    new UpdateTask(this).execute(dataTime);

т.е. я устанавливаю в GridView 4 колонки, а позже выполняю ресайз фонов (т.к. заведомо не известно на экране с каким разрешением будет приложение, а деформировать фоны не хорошо, поэтому обрезаю). Так вот, в методе ResizeDefaultBackgrounds() есть строка

    int picSize = getSizeBitmapToDisplay(0.95f);

Где в свою очередь getSizeBitmapToDisplay использует количество колонок:

    int count = gvMain.getNumColumns();
    DisplayMetrics metricsB = ((MainActivity)context).getResources().getDisplayMetrics();
    int newWidth = (int)((metricsB.widthPixels/(float)count)*fillPart);
    return  newWidth;

дабы не хранить неоправданно большие картинки, так сказать. Так вот если вывести в логи значение gvMain.getNumColumns(); из последнего отрывка, то он будет равняться -1. Как так? Я же задал 4? При этом если использовать

int picSize = getSizeBitmapToDisplay(0.95f);

внутри следующей команды из главной активности

new UpdateTask(this).execute(dataTime);

То там уже корректно будет геттер давать 4 колонки.

Ответы

▲ 2Принят

Вы в onCreate этот метод используете? Попробуйте ViewTreeObserver:

        ViewTreeObserver vto = gvMain.getViewTreeObserver();  
        vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {  
            @SuppressWarnings("deprecation")
            @Override  
            public void onGlobalLayout() {  
                if(Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) 
                    v.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
                else
                    v.getViewTreeObserver().removeOnGlobalLayoutListener(this);

                //здесь gvMain.getNumColumns() точно вернёт 4

            }  
        });