片段后面的不可见布局被点击:

我创build了几个片段,我用下面的方法添加第一个片段:

mainFragment = (MainFragment) MainFragment.create(); getSupportFragmentManager().beginTransaction() .setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right) .add(R.id.content, mainFragment, MAIN_FRAGMENT_TAG) .commit(); 

第二个片段是这样添加的:

  getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right) //.hide(mainFragment) .add(R.id.content,VenueFragment.create(vid), "Venue Fragment") .addToBackStack(null) .commit(); setDrawerIndicatorEnabled(false); 

现在,当您看到hide方法不适用于此事务,并且VenueFragment被打开时,这种情况下的问题是在VenueFragment打开(并且是全屏视图)时,按此片段的空白部分,调用MainFragment可点击的视图。 我怎样才能防止这个?

如果我使用隐藏选项,那么它不会发生,但由于某种原因,删除MainFragment的animation正在上升,这是一个奇怪的经验。

  • 嵌套片段转换不正确
  • 当按下后退button时如何用片段Areplace片段C?
  • FragmentTransaction没有做任何事情
  • Android FragmentTransaction.addToBackStack混乱
  • 已经调用Android FragmentTransaction提交
  • 片段生命周期 - 显示/隐藏哪个方法?
  • 何时使用FragmentTransaction的附加和分离方法
  • FragmentManager.getFragmens()。size()不会减lessFragmentTransaction.remove(Fragment)
  • 您需要使VenueFragment的根ViewGroup可点击,以便处理点击事件,并且不会按照z顺序传递给另一个Fragment

    将第二个片段视图的可点击属性设置为true。

    例如:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" />

    在VenueFragment上设置一个onClickListener可以工作,但是我会添加更多的解释。 让主要的片段得到一个触摸事件的目的是为了处理场地片段是透明的情况。 在这种情况下,期望触摸透过您的透明视图到下面的视图可能是合理的。 因此,android传递触摸事件,直到它们可以被处理。 设置一个onClickListener将处理事件,防止它被传递到下一个视图。 如果您想要防止点击较低片段的“正确”,那么有几个选项:

    1. 从OnPause中的主片段中移除onClickListener,并将其设置为OnResume。 这样,任何时候主片段不是活动片段,都不能被点击。
    2. 在VenueFragment中将顶层布局子类化,然后重写OnTouchEvent以返回true。 这基本上和设置onClickListener一样,但是你可能会发现它使得你打算把所有的触摸事件都更加清晰。

    那么非常快速的答案是android:clickable="true"在片段的布局属性的顶部。

    但是,如果您使用FrameLayout及其id并且在该活动中没有其他元素创build一个活动 ,那将是更好的做法。 所以,只要你想要一个片段在屏幕上,给这个活动打电话和使用

     getSupportFragmentManager().beginTransaction() .setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right) .replace(R.id.frameLayoutId, mainFragment, MAIN_FRAGMENT_TAG) .commit(); 

    使用replace而不是添加,以便frameLayoutframeLayoutId给出的片段布局replace