我正在使用嵌套片段,使用代码
从一个片段传递到另一个片段ImageView search = (ImageView) root.findViewById(R.id.search);
search.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.addToBackStack(null);
transaction.replace(R.id.parent, ChildFragment.newInstance());
transaction.commit();
}
});
然而,有时会发生从子片段中我仍然可以单击父片段的项目,即使它们是不可见的(由子片段覆盖)。特别是,当孩子具有类型
的简单布局时,会发生这种情况<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#FFF0D1"
android:id="@+id/child">
...some stuff...
</RelativeLayout>
但是当我使用嵌套布局时不会发生这种情况
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#FFF0D1"
android:id="@+id/child">
<ScrollView
android:id="@+id/scr"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentTop="true"
android:padding="10dp">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
...same stuff...
</RelativeLayout>
</ScrollView>
</RelativeLayout>
有人知道为什么会这样吗?
答案 0 :(得分:4)
原因:如果您没有拦截/处理子片段中的点击 - 它将被传递给父片段。即使您处理某些元素的点击,也不会改变整个情况。
最简单的解决方案:避免此行为 - 声明< 子片段的强>最外层布局可点击,如下所示:
<RelativeLayout
...
android:clickable="true"
...>
...
在这种情况下,您甚至不必实施onClickListener