后台ListView接收输入(Fragment API)

时间:2011-05-31 16:23:27

标签: android tabs focus fragment android-framelayout

我的应用基于标签式布局,其中每个标签都指定了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的理解,可以像这样叠加视图。

该代码有什么问题?

既然没有答案或评论,那就是一个更普遍的问题:
是否存在任何已知情况,即背景中的视图应该接收输入,或者在任何情况下都是错误的行为?

1 个答案:

答案 0 :(得分:1)

此行为的原因是ViewGroups默认情况下不处理输入事件,而是将它们传递给它们后面的小部件(如果有的话)。
在我给定的代码中,列表的高度为“wrap_content”,因此剩余的垂直区域仅由LinearLayout元素覆盖,该元素将输入传递给隐藏片段。
我想要的行为可以通过

来实现
  • 将listView的高度设置为“fill_parent” 或
  • 使用空onClick方法
  • 将OnClickListener添加到LinearLayout