我在添加一个片段到Activity中,而不是替换当前片段(因为这对应于我想要的行为类型)。
我的问题是,在顶部片段(当前可见的片段)上的某个位置(不可见片段中的视图所在的位置)单击,会导致第二个不可见片段中的视图上的onClick事件触发。为什么会发生这种情况?我如何才能防止这种情况?
下面是我用来将ListView片段添加到Activity中的第一个代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
...
if (savedInstanceState == null) {
listFragment = new ListFragment ();
getSupportFragmentManager().beginTransaction()
.add(R.id.frame_container, listFragment)
.addToBackStack(listFragment .TAG)
.commit();
}
...
}
在同一个练习中,我在列表片段的顶部添加了第二个片段:
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
...
createItemFragment = new CreateItemFragment();
getSupportFragmentManager().beginTransaction()
.add(R.id.frame_container, createItemFragment)
.addToBackStack(createItemFragment.TAG)
.commit();
...
}
5条答案
按热度按时间vktxenjb1#
您可以将以下属性添加到前面的片段的XML根布局中-
这将确保触摸事件将不会传播得比顶层更远。
c86crjj02#
如果你要添加一个片段,它会覆盖它下面的所有片段。所以,如果你想同时显示两个视图,这是一种方法。自然地,当两个视图都存在时,两个视图都会监听触摸事件。如果你想保留片段但不显示它,请用途:
这将删除片段视图而不破坏片段。
您可以拨打
稍后将其重新附着到视图。
或者,您可以只更改单击侦听器以
suzh9iv83#
我认为最好的方法是将onClickListener设置为您在顶部片段上单击的locateView。
如果您使用Metal Beard回答android:clickable=“true”的方式,并且您还设置了任何ImageView的选择器状态(见下文),则您将发现此错误:如果您单击其他空间位置,imageView将更改状态。
如果在顶部片段上点击的视图是mBootomLayout,则只需这样做:
6xfqseft4#
3pvhb19x5#
希望这还不算太晚。我相信这可能还是有帮助的。
您应该做的是获取片段的根视图,将其命名为
setOnTouchListener
,实现View.OnTouchListener
并在其onTouch
方法中返回true