我的应用基于标签式布局,其中每个标签都指定了FragmentActivity 其中一项活动有以下布局:
<FrameLayout
android:id="@+id/filialenView"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListView android:layout_height="wrap_content" android:id="@+id/filialList"
android:layout_width="fill_parent"></ListView>
</FrameLayout>
切换到该选项卡时,会创建并显示一个列表 如果选择了列表项,则会创建片段并显示在列表顶部:
Filiale fragment = new Filiale();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.filialenView, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
Fragment Filiale 的布局“filial_detail.xml”如下所示
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
... content...
</LinearLayout>
并在onCreateView中像这样膨胀
View curView = inflater.inflate(R.layout.filial_detail, container, false);
一切都像预期的那样工作,除了在切换到Fragment之后,nomore可见列表似乎保持输入焦点。如果我在某个“空”区域触摸屏幕,则片段后面的隐藏列表项会触发。另外,如果我滑动,我可以从LogCat输出中看到列表滚动
根据我对FrameLayout的理解,可以像这样叠加视图。
该代码有什么问题?
既然没有答案或评论,那就是一个更普遍的问题:
是否存在任何已知情况,即背景中的视图应该接收输入,或者在任何情况下都是错误的行为?
答案 0 :(得分:1)
此行为的原因是ViewGroups默认情况下不处理输入事件,而是将它们传递给它们后面的小部件(如果有的话)。
在我给定的代码中,列表的高度为“wrap_content”,因此剩余的垂直区域仅由LinearLayout元素覆盖,该元素将输入传递给隐藏片段。
我想要的行为可以通过