未绘制FrameLayout中的子项

时间:2012-02-04 19:10:36

标签: android layout invalidation android-framelayout

我正在我的Android应用中实现一个功能,用户可以在FrameLayout中动态添加和删除视图,并使用拖放技术将其置于绝对坐标位置。用户通常会将楼层规划图像作为背景加载到FrameLayout,然后添加代表房屋内灯具的按钮,并在适当的位置放置它们。

无论如何,我有一个问题,我需要在加载FrameLayout时向Fragment充气并添加视图。子视图源自SQLite数据库中的信息。为了正确定位子视图(取决于方向),我需要考虑FrameLayout的宽度和高度。因此,我无法在onCreateView()中的Fragment中完成此项工作。

FrameLayout实际上是DragArea(为了简单起见,我仍会将此对象称为FrameLayout),这是一个扩展FrameLayout的自定义类。为了在计算宽度/高度时收到Fragment的回调,我在onSizeChanged中覆盖了调用FrameLayout的{​​{1}}。

这是奇怪的事情。如果我在我的Fragment的回调方法中创建视图并调用Fragment似乎没有任何事情发生。检查说这些意见已添加到FrameLayout.invalidate,但没有看到。如果我打开层次结构查看器并按“加载视图层次结构”,则会显示视图。所以这里似乎有副作用来吸引观点。我试图调用FrameLayout并通过在FrameLayout.requestLayout()中执行逻辑来确保它在UI线程上运行,但它没有任何区别。

但是!如果我改为将getActivity().runOnUiThread()中的逻辑放在(无用)onPostExecuted()中,则会绘制视图。

请参阅下面的代码,以便在评论中进一步说明。回调方法名为AsyncTask,并从onWidthAvailable()调用。

我还试图在以后的任意时间点调用FrameLayout.onSizeChanged()而没有运气。

invalidate()

0 个答案:

没有答案