Пользовательский макет вызывает сбой, если я вызываю что-то на onVisibilityChanged или onWindowFocusChanged на Android

У меня есть собственный RelativeLayout и внутри него у меня есть функция, которая создает мини-представления. Если я вызову эту функцию в конструкторе, все в порядке. Но я хочу знать размеры макета, прежде чем я вызову эту функцию. Так что, если я вызову функцию в onVisibilityChangedonWindowFocusChanged У меня есть размеры макета, так как он заполнен. Проблема в том, что я получаю исключение, если я делаю это там. Также, если я задержу функцию в конструкторе, как это

 handler.postDelayed(new Runnable(){
         public void run(){
        AnONcamelCaseFUNction();
         }
         }, 2000);

я получаю ту же ошибку (ошибка не имеет значения, трассировка стека не поможет.) Я думаю, что это связано с "не связывайтесь с представлением, если оно уже заполнено... но я не знаю, что делать.

ОБНОВЛЕНИЕ: вот, как я добавляю представления. (Множество linearLayouts для одного большого RelativeLayout). Пожалуйста, обратите внимание, что это не работает только на post.executions. В конструкторе это работает.

LinearLayout cells = null;
        RelativeLayout.LayoutParams tr;
tr = new RelativeLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.WRAP_CONTENT);
cells = new LinearLayout(context);
cells.setLayoutParams(tr);
addView(cells);

Трассировки стека:

08-04 02:29:22.748: ERROR/AndroidRuntime(11355): java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams
08-04 02:29:22.748: ERROR/AndroidRuntime(11355):     at android.widget.FrameLayout.onLayout(FrameLayout.java:293)
08-04 02:29:22.748: ERROR/AndroidRuntime(11355):     at android.view.View.layout(View.java:7278)
08-04 02:29:22.748: ERROR/AndroidRuntime(11355):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
08-04 02:29:22.748: ERROR/AndroidRuntime(11355):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
08-04 02:29:22.748: ERROR/AndroidRuntime(11355):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
08-04 02:29:22.748: ERROR/AndroidRuntime(11355):     at android.view.View.layout(View.java:7278)
08-04 02:29:22.748: ERROR/AndroidRuntime(11355):     at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
08-04 02:29:22.748: ERROR/AndroidRuntime(11355):     at android.view.View.layout(View.java:7278)
08-04 02:29:22.748: ERROR/AndroidRuntime(11355):     at android.view.ViewRoot.performTraversals(ViewRoot.java:1172)
08-04 02:29:22.748: ERROR/AndroidRuntime(11355):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1921)
08-04 02:29:22.748: ERROR/AndroidRuntime(11355):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-04 02:29:22.748: ERROR/AndroidRuntime(11355):     at android.os.Looper.loop(Looper.java:143)
08-04 02:29:22.748: ERROR/AndroidRuntime(11355):     at android.app.ActivityThread.main(ActivityThread.java:4196)
08-04 02:29:22.748: ERROR/AndroidRuntime(11355):     at java.lang.reflect.Method.invokeNative(Native Method)
08-04 02:29:22.748: ERROR/AndroidRuntime(11355):     at java.lang.reflect.Method.invoke(Method.java:507)
08-04 02:29:22.748: ERROR/AndroidRuntime(11355):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-04 02:29:22.748: ERROR/AndroidRuntime(11355):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-04 02:29:22.748: ERROR/AndroidRuntime(11355):     at dalvik.system.NativeStart.main(Native Method)

enter code here

1 ответ

Решение

Исправлено: я устанавливал LayoutsParams RelativeLayout внутри этой функции.

Другие вопросы по тегам