这是我的视图层次结构:
-RelativeLayout [rootView](root)
LinearLayout [menu_holder](菜单片段布局)
RelativeLayout [app_holder](应用内容布局)
操作栏(实施ActionBar的自定义视图< 2.1
FrameLayout [content_fragment](加载内容片段的布局)
FloatingMenu(自定义LinearLayout以显示浮动小部件)
<com.example.app.views.widgets.RootLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drag_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/white" >
<LinearLayout
android:id="@+id/menu_holder"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/red"
android:orientation="vertical" />
<com.example.app.views.widgets.AppHolder
android:id="@+id/app_holder"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/gray" >
<com.example.app.widgets.ActionBar
android:id="@+id/action_bar"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/content_holder"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/action_bar"
android:background="@drawable/backrepeat" >
</FrameLayout>
<com.example.app.widgets.FloatingMenu
android:id="@+id/floating_menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:padding="15dp"
android:visibility="gone" />
</com.example.app.views.widgets.AppHolder>
</com.example.app.views.widgets.RootLayout>
现在我加载menu_holder&amp; app_holder进入rootView,这样app_holder就会保持在最顶层。现在,当用户按下MENU按钮时,app_holder向右滑动以显示左侧的基础菜单片段,如下图所示:
我在runnable中使用scroller将app_holder向右滑动。在抵消我的app_holder之后,我还在rootView上每隔16ms调用invalidate()。
它的工作正常,但是当菜单片段可见时,在content_fragment(可见性集或从Web加载)中加载任何内容时会出现问题。无效视图(越界)调用requestLayout(),并且以下布局调用将app_holder重置为其初始位置。我在content_fragment上实现了延迟加载列表视图,因此列表视图(notifyDataSetChanged等)上的任何更新都会启动重新布局调用。
如何阻止这种情况发生?
在右侧的所有动态加载的视图上覆盖和注释requestLayout()将解决问题,但还有其他正确的方法吗?